Код: Выделить всё
if (date()+clock())>(Date1+Time1)
...
end
Что можно сделать? Может через группу? Может через int64?
Вдруг у кого была такая задача.
Модератор: Дед Пахом
Код: Выделить всё
if (date()+clock())>(Date1+Time1)
...
end
Можно попробовать не изобретать велосипед, а сделать как например Java Script ...
Код: Выделить всё
If ClaDateTimeToJava(ToDay(),Clock()) > SQLDateTimeToJava(Date1,Time1)
...
end
Код: Выделить всё
msxml::ConvertClaDateTimetoDATE PROCEDURE(LONG pDate, LONG pTime = 0)
Date0 LONG, AUTO
ClaMaxTime REAL(8640000.0)
oleDate TOLEDATE
CODE
Date0 = DATE(12, 30, 1899)
!-- date part
oleDate = pDate - Date0
!-- time part
IF pTime
IF oleDate => 0
oleDate += (pTime - 1.0) / ClaMaxTime
ELSE
oleDate = ABS(oleDate)
oleDate += (pTime * 1.0) / ClaMaxTime
oleDate = -oleDate
END
END
RETURN oleDate
msxml::ConvertStrDateTimetoDATE PROCEDURE(STRING pDateTimeStr)
!-- pDateTimeStr in '1997-07-31T00:00:00' format
nTPos LONG, AUTO
nDate LONG, AUTO
nTime LONG, AUTO
CODE
IF NOT pDateTimeStr
RETURN 0
END
nTPos = INSTRING('T', pDateTimeStr, 1, 1)
ASSERT(nTPos)
IF NOT nTPos
msxml::DebugInfo('Invalid DateTime string: '& pDateTimeStr)
RETURN 0
END
nDate = DEFORMAT(pDateTimeStr[1 : nTPos - 1], @d10-)
nTime = DEFORMAT(pDateTimeStr[nTPos + 1 : LEN(CLIP(pDateTimeStr))], @t04)
RETURN msxml::ConvertClaDateTimetoDATE(nDate, nTime)
Код: Выделить всё
!-- The DATE type is implemented using an 8-byte floating-point number.
!-- Days are represented by whole number increments starting with 30 December 1899, midnight as time zero.
!-- Hour values are expressed as the absolute value of the fractional part of the number.
TOLEDATE EQUATE(REAL)
Код: Выделить всё
LOC:Test64_Group group(uint64)
end
LOC:Test64_2_Group group(uint64)
end
LOC:Test64 Real, over(LOC:Test64_Group)
LOC:Test64_2 Real, over(LOC:Test64_2_Group)
LOC:Test64_Group.hi = clock()
LOC:Test64_Group.lo = today()
LOC:Test64_2_Group.hi = LOC:Test64_Group.hi - 1000
LOC:Test64_2_Group.lo = today()
stop(LOC:Test64 & ' ' & LOC:Test64_2)
if LOC:Test64>LOC:Test64_2
stop('ОК')
else
stop('Всё плохо')
end
Код: Выделить всё
Date2Posix PROCEDURE(LONG,<LONG>,*ULONG) !!Clarion Standard Date & Time --> Posix Time
Posix2Date PROCEDURE(ULONG,*LONG,*LONG) !!Posix Time --> Clarion Standard Date & Time
Date2Posix PROCEDURE (Date1,Time1,PosixTime) ! Declare Procedure
CODE
! 1 day = 86400 seconds
if Date1 or Time1 then
POSIXTime = (Date1 - 38101)
POSIXTime *= 86400
POSIXTime = POSIXTime + (5*3600 + 24*60 + 16)
if ~omitted(2) then
POSIXTime += (Time1 / 100)
else ! если пропущен 2-й параметр (время),
POSIXTime += 86400 ! то добавить полные сутки
.
else
clear(PosixTime)
.
Posix2Date PROCEDURE (PosixTime,Date1,Time1) ! Declare Procedure
CODE
! 1 day = 86400 seconds
if POSIXTime then
POSIXTime = POSIXTime - (5*3600 + 24*60 + 16)
Date1 = POSIXTime / 86400 + 38101
Time1 = (POSIXTime % 86400) * 100 + 1
else
clear(Date1)
clear(Time1)
.
Код: Выделить всё
map
module('CLib')
StrCmp(*cstring, *cstring), signed, raw, name('_strcmp')
end
end
code
...
dt1 = format(d1,@N07) & format(t1,@N07) ! dt1 cstring(15)
dt2 = format(d2,@N07) & format(t2,@N07) ! dt1 cstring(15)
! или так, для визуального контроля
! dt1 = format(d1,@d12) & format(t1,@t5)
! dt2 = format(d2,@d12) & format(t2,@t5)
if StrCmp(dt1, dt2) ! =0 -> dt1=dt2 0< -> dt1>dt2 <0 -> dt1<dt2
...
end