Hi, > I worked out an Date and Time to Epoch conversion recently. I’d be interested > if anyone can find a case where it doesn’t work: > > > > C_DATE($1) > C_TIME($2) > C_LONGINT($0) > > C_DATE($vd_Current) > C_TIME($vh_Current) > C_TIME($vh_ISO_GMT) > C_LONGINT($vl_Unix_Timestamp_Offset) > > > $vd_Current:=Current date > $vh_Current:=Current time > $vh_ISO_GMT:=Time(Substring(String($vd_Current;ISO date > GMT;$vh_Current);12;8)) > $vl_Unix_Timestamp_Offset:=($vh_ISO_GMT-$vh_Current)*1 > > $0:=($1-Date("01/01/1970"))*(60*60*24)+($2*1)+$vl_Unix_Timestamp_Offset
Avoid using Date() to convert a string to a date because this will rely on the date being formatted according to you current system setting... I use this : C_LONGINT($0;$vl_epoch) C_DATE($1;$vd_date) C_TIME($2;$vh_time) ASSERT(Count parameters>1;"requires 2 parameters") ASSERT($1#!00/00/0000!;"$1 cannot be a null date") $vd_date:=$1 $vh_time:=$2 C_TEXT($vt_timestampUtc) $vt_timestampUtc:=String($vd_date;ISO Date GMT;$vh_time) // "2017-03-26T18:07:16Z" at 20:07:16 french time zone (just moved to summer time on 26th march 2017) // NOTE : in v12, v13, v14 there is a bug : on 26/03/2017 (day when the daylight shift changes) it returns 19:07:16Z when it should return 18:07:16Z. Ok for subsequent days... // seems ok in v15 - tested on Mac OS 10.8 $vt_timestampUtc:=Substring($vt_timestampUtc;1;19) // remove the "Z" // "2017-03-26T18:07:16Z" => "2017-03-26T18:07:16" // XML DECODE will convert "2017-03-26T18:07:16" into !2017-03-26! date and ?18:07:16? time // works ok in 4D v12+ : another great trick from Miyako to parse a timestamp in "YYY-MM-DDTHH:Mi:SS" ;-) C_DATE($vd_dateUtc) C_TIME($vh_timeUtc) XML DECODE($vt_timestampUtc;$vd_dateUtc) XML DECODE($vt_timestampUtc;$vh_timeUtc) // 86400 = 60*60*24 $vl_epoch:=(($vd_dateUtc-!01/01/1970! )*86400)+$vh_timeUtc $0:=$vl_epoch In OS X Terminal, you can use this to check / compare with system epoch /bin/date +%s So you could use a function like this : // this is OS X only !!! C_LONGINT($0;$vl_epoch) C_TEXT($vt_cmd;$vt_in;$vt_out;$vt_err) $vt_cmd:="/bin/date +%s" LAUNCH EXTERNAL PROCESS($vt_cmd;$vt_in;$vt_out;$vt_err) ASSERT(ok=1;"LAUNCH EXTERNAL PROCESS with command \""+$vt_cmd+"\" failed") $vl_epoch:=Num(Replace string($vt_out;"\n";"";*)) $0:=$vl_epoch HTH ********************************************************************** 4D Internet Users Group (4D iNUG) FAQ: http://lists.4d.com/faqnug.html Archive: http://lists.4d.com/archives.html Options: http://lists.4d.com/mailman/options/4d_tech Unsub: mailto:4d_tech-unsubscr...@lists.4d.com **********************************************************************