函数原型:
__int64 __fastcall DateTimeToUnix(const System::TDateTime AValue, bool AInputIsUTC = true);
头文件:
#include <System.DateUtils.hpp> (XE2 之后) #include <DateUtils.hpp> (XE 之前)
参数:
AValue: TDateTime 类型的 UTC 时间或本地时间。
AInputIsUTC: 参数 AValue 的时间是 UTC 时间。true: AValue 是 UTC 时间,false: AValue 是本地时间。
返回值:
UNIX 时间戳,从 UTC 时间 1970年1月1日0时开始的,到这个时刻的秒数;
这个函数的时间戳是 __int64 类型的,没有 “2038年问题” 或 “Year 2038 problem” 了,
实际测试,一直计算到 9999年12月31日都没有问题。
例1:获取当前系统时间的时间戳
__int64 t = DateTimeToUnix(Now(), false); // 始终能够得到正确的结果,没有 2038年问题 |
例2:把本地时间 9999年12月31日 23:59:59 转为 UNIX 时间戳,再把时间戳转回本地时间
void __fastcall TForm1::Button5Click(TObject *Sender)
{
TDateTime dt1 = TDateTime(9999,12,31,23,59,59,999);
__int64 iTimeStamp = DateTimeToUnix(dt1, false);
Memo1->Lines->Add(L"UNIX 时间戳:" + IntToStr(iTimeStamp));
TDateTime dt2 = UnixToDateTime(iTimeStamp, false);
Memo1->Lines->Add(L"本地时间:" + dt2);
} |
运行结果:
UNIX 时间戳:253402271999
本地时间:9999-12-31 23:59:59 |
|