关于时间计算的问题(50分)

  • 主题发起人 主题发起人 lldhz
  • 开始时间 开始时间
L

lldhz

Unregistered / Unconfirmed
GUEST, unregistred user!
1。我在数据库中设置一个记录上下班时间的字段,要求计算迟到,早退等。现在我想直接
对字段进行计算,有没有函数可以得到两个时间之间的差(差值要有正负,如果有需要可以
带日期), delphi,sql的都可以。
2。有没有函数可以得到一个月有多少个星期天?是不是一定要用循环来得到?
 
1.直接对两个时间变量相减就可以了。日期时间变量其实也是按实数来保存并计算的。
得出的结果整数部分是相差的天数,小数部分是时分秒数。代码示例如下:
var_real:=date1-date2;
var_second:=Round(var_real*24*60*60) //求两时间相差的秒数
2.没见过这样的函数,估计要循环判断了。
 
1.GetTickCount可以得到时间,用先得到的时间减就可以了
 
没有写完就提交了,:)
2、简单的办法:

因为每月的周六都是 4 或 5 个,周日、周一等也一样;

所以你先算出该月第一天是星期几(DayOfWeek),假如是星期五, 再算 该月的天数(下月1号减本月1号),假如是 31 天
而 31 - 28 = 3;
因此该月的分配就是 星期五,六,日各 5 天,其它各 4 天
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1307806
 
HunterTeam:
负数是得到了,你看看我的代码,怎么会有-3W多啊
Time1:=strtotime('10:10:14');
Time2:=Now;
t:=Time1-time2;
Edit1.Text:=inttostr(trunc(t));

yangxiao_jiang,:
//GetTickCount可以得到时间,用先得到的时间减就可以了
我的时间是要输入的,前一个减后面的能得到负数??
Time1:=strtotime('10:10:14');
Time2:=Now;
Edit1.Text:=TimeToStr(Time1-Time2);
得到的都是是正的啊。

smallbs:
我主要是要得到负数,这个作为标志,用来记录迟到早退之类的!
 
策略点嘛
if Time1<Now then
Edit1.Text:='-'+TimeToStr(Time1-Now);
 
用 strToDateTime,时间前面加个日期
now 中是有日期的,
 
>负数是得到了,你看看我的代码,怎么会有-3W多啊
now里面有当天的日期值,所以time1里面也应当有当天的日期值,否则就成了1899-1-1的
日期了:
Time1:=strtotime(formatdatetime('yyyy-mm-dd',now)+' 10:10:14');//注意日期与时间中留一空格
 
datediff('mm',date1,date2);//分钟
function WeekSpan(const ANow, AThen: TDateTime): Double;

Description

Call WeekSpan to obtain the difference, in weeks, between two TDateTime values. Unlike the WeeksBetween function, which only counts whole weeks, WeekSpan reports incomplete weeks as a fraction of an entire week.
 
先用
DecodeDateTime(const AValue: TDateTime; out AYear, AMonth,
ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
分解再用
EncodeDateTime(const AYear, AMonth,
ADay, AHour, AMinute, ASecond, AMilliSecond: Word):TDateTime;
合并
 
多人接受答案了。
 
后退
顶部