我的PowerBuilder(2017)代码中有两个日期时间变量,如下所示:
var1 =“ 09/02/2020 23:59:59” var2 =“ 09/03/2020 00:00:02”
我需要找出这两个日期之间的时差(以秒为单位(在这种情况下为3秒))?
-谢谢。
答案 0 :(得分:1)
这是一个简单的解决方案。
ll_time1 = secondsafter(time(adt_start), time("23:59:59")) + 1
ll_time2 = secondsafter(time("00:00:00"), time(adt_end))
ll_retval = ll_time1 + ll_time2
答案 1 :(得分:0)
尝试SecondsAfter方法,例如ll_dif = SecondsAfter(var1,var2)
或者,您也可以使用DateDiff方法发出一条sql语句(SQL Server使用DateDiff(second,var1,var2),还需要查找其他DBMS)。
答案 2 :(得分:0)
计算日期之间的差异,然后计算时间之间的差异。
这是“编辑源代码”中的一个示例。
global type gf_secondsafter from function_object
end type
forward prototypes
global function long gf_secondsafter (readonly datetime adt_start, readonly datetime adt_end)
end prototypes
global function long gf_secondsafter (readonly datetime adt_start, readonly datetime adt_end);
constant long lc_hours_in_day = 24, lc_minutes_in_hour = 60, lc_seconds_in_minute = 60
date ld_start, ld_end
time lt_start, lt_end
long ll_days, ll_seconds, ll_result
ld_start = date( adt_start )
lt_start = time( adt_start )
ld_end = date( adt_end )
lt_end = time( adt_end )
ll_days = DaysAfter( ld_start, ld_end )
ll_seconds = SecondsAfter ( lt_start, lt_end )
//This is the number of days multiplied by the number of seconds in a day
ll_result = ll_days * lc_hours_in_day * lc_minutes_in_hour * lc_seconds_in_minute
// Add the seconds from the time difference
ll_result += ll_seconds
return ll_result
end function
答案 3 :(得分:0)
第一;我们将创建一个名为 relativedatetime_1second() 的辅助函数,在 1 秒后返回相对日期时间:
global type relativedatetime_1second from function_object
end type
forward prototypes
global function datetime relativedatetime_1second (date dt, time tm)
end prototypes
global function datetime relativedatetime_1second (date dt, time tm);
time new_tm
date new_dt
// return datetime after 1 second(s)
new_tm = tm
if new_tm = 23:59:59 then
new_dt = RelativeDate(dt,1)
new_tm = 00:00:00
elseif new_tm = 00:00:00 then
new_dt = dt
new_tm = 00:00:01
else
new_dt = dt
new_tm = RelativeTime(tm,1)
end if
return datetime(new_dt, new_tm)
end function
其次;创建一个名为 diffdatetime() 的递归函数,以秒为单位返回两个日期时间变量之间的差异:
global type DiffDateTime from function_object
end type
forward prototypes
global function long diffdatetime (datetime adt_date1, datetime adt_date2)
end prototypes
global function long diffdatetime (datetime adt_date1, datetime adt_date2);
datetime new_dt, next_dt
long seconds, seconds1, period, remaining_period
// return diff in seconds between two datetime
//suppose always date1 smaller otherwise return negative
period = DaysAfter ( date(adt_date1), date(adt_date2) ) -1
new_dt = adt_date1
if period = -1 then //same day
seconds = SecondsAfter ( time(adt_date1), time(adt_date2) )
elseif period = 0 then //one day counts seconds one by one
do
new_dt = relativedatetime_1second(date(adt_date1), time(adt_date1))
adt_date1 = new_dt
seconds =seconds + 1
loop until adt_date1 = adt_date2
else //extract one day concept plus the remaining days-after
next_dt = datetime(RelativeDate(date(adt_date1), 1), time(adt_date2))
seconds1 = diffdatetime(adt_date1, next_dt)
remaining_period = period * 24 * 60 * 60
seconds = seconds1 + remaining_period
end if
return seconds
end function
最后;获取 datetime1 和 datetime2(每秒)之间的差异如下:
messagebox("Seconds", string(diffdatetime(var1, var2)))
*注:如果datetime2出现在datetime1之前,diffdatetime()返回一个负数
答案 4 :(得分:-1)
long ll_time1, ll_time2
ll_time1 = secondsafter(time(adt_start), time("23:59:59")) + 1
ll_time2 = secondsafter(time("00:00:00"), time(adt_end))
return (ll_time1 + ll_time2)