使用 ISO-8601 格式,详见http://en.wikipedia.org/wiki/ISO_8601
如果您需要节省存储空间,可以使用“紧凑”布局,例如'20090621T054523'。
您可以使用例如FormatDateTime('yyyymmddThhnnss',aDateTime) 制作它。
关于时区和本地化(来自维基百科):
ISO 8601 中没有时区指示符。时间仅表示为本地时间或与 UTC 相关的时间。
如果没有给出带有时间表示的 UTC 关系信息,则假定时间为本地时间。虽然在同一时区进行通信时假定本地时间可能是安全的,但在跨不同时区进行通信时它是模棱两可的。通常最好使用标准的符号来指示时区(区域指示符)。
因此,您最好将时间转换为 UTC,然后在时间戳末尾附加“Z”。或者根据您当地的时区使用 +hh/-hh。 以下时间均指同一时刻:“18:30Z”、“22:30+04”、“1130-0700”和“15:00-03:30”。 p>
为了获得更好的分辨率,您可以通过在逗号或点字符后添加分数来添加亚秒级计时:例如要表示“14 小时、30 分钟、10 秒和 500 毫秒”,将其表示为“14:30:10,5”、“143010,5”、“14:30:10.5”或“143010.5”。您可以添加多个小数来提高分辨率。
如果您需要快速Iso8601 转换例程(处理 UTF-8 内容),请查看SynCommons.pas 中的相应部分。它比默认的SysUtils 函数快得多。
PS:
如果您的目的只是将 TDateTime 作为文本存储在纯 Delphi 应用程序中,您可以使用 不是标准的但速度很快:
function DateTimeToText(const aDateTime: TDateTime): string;
begin
result := IntToStr(PInt64(@aDateTime)^);
end;
function TextToDateTime(const aText: string): TDateTime;
begin
PInt64(@result)^ := StrToInt64Def(aText,0);
end;
使用TDateTime/double 内存结构的Int64 二进制布局将比任何其他与浮点相关的转换更快。