最近在使用DateTimeToUnix和UnixToDateTime转换的过程中发现的问题,DateTimeToUnix比C语言中的time时间多了28800秒,也就是8小时,这是因为Delphi用的是当前时区的时间,c语言中time()是按格林威治时间计算的,北京时间比格林威治时间多了8小时。
首先需要引用Use DateUtils。
DateTimeToUnix(Now)获得今天的时间戳。
DateTimeToUnix(Now)-28800(8*60*60) 就和C语言中time()得到的一样了 。
UnixToDateTime(时间戳+28800(8*60*60)) 解析出正确的时间。
案例:假设时间为
var
DateStr:string;
DateStr:='2022-07-10 17:30:30';
ed1.Text:=IntToStr(DateTimeToUnix(StrToDateTime(DateStr))); //得出来的是:1657474230
看到了转出来的变11号了,日期不对。
ed2.Text:=IntToStr(DateTimeToUnix(StrToDateTime(DateStr))-28800);
//得出来的是:1657445430 日期正确。
ed3.Text:=FormatDateTime('yyyy-mm-dd hh:mm:ss',UnixToDateTime(StrToInt64(ed1.Text)));
ed4.Text:=FormatDateTime('yyyy-mm-dd hh:mm:ss',UnixToDateTime(StrToInt64(ed2.Text)+28800));
可以用以下网址检验成果。
Unix时间戳(Unix timestamp)转换工具 - 站长工具



