PowerBuilder中两个日期时间变量之间的差异

时间:2020-09-02 16:57:25

标签: powerbuilder

我的PowerBuilder(2017)代码中有两个日期时间变量,如下所示:

var1 =“ 09/02/2020 23:59:59” var2 =“ 09/03/2020 00:00:02”

我需要找出这两个日期之间的时差(以秒为单位(在这种情况下为3秒))?

-谢谢。

5 个答案:

答案 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)