时间戳
的伟大在有很多选项
.有时,在调试
(或阅读
不完整文档
)时,你会找到时间戳
,并想知道如何把它转换
为可读的内容
.这里有一些提示.
使用2002
年11
月26
日Pst
下午7:25
作为采样时间
.
UNIX
时间戳自1970
年1月1日UTC
以来按秒数的32
位数字,是唯一常用的32
位数字的时间戳
.
2002
年11
月26
日pst7:25p=0x3DE43B0C
.
如果是以"3"
开头的32
位值,则可能是UNIX
时间.("3"
时代始于1995
年,结束于2004
年).
要转换这些值
为可读值,有多种选择.
c运行时
C运行时的time_t
值与UNIX
时间戳相同,因此可用ctime()
函数.
这是C运行时
和窗口NT
事件日志使用的时间格式
.
2:Win32的FILETIME.
Win32
文件时间值为,自1600
年1月1日UTC
以来至今按100
纳秒计算的64
位数字的间隔.2002
年11
月26
日晚上7:25PST=0x01C295C4:91150E00
.
如果它是以"01"
和1个字母开头的64
位值,则可能是Win32
的FILETIME
."01A"
时代始于1972
年,"01F"
时代结束于2057
年.
若要转换这些值
为可读值,可在GetDateFormat()和GetTimeFormat()
函数后用FileTimeToSystemTime()
函数.
3:CLRSystem.DateTime
警告:.NET
内容(对不起).CLR
的System.DateTime
值为UTC
1年1月1日以来的按100
纳秒的64
位数字的间隔.不常用.2002
年11
月26
日pst7:25p=0x08C462CB:FCED3800
.(?有人检查数学)
如果以"08"
和字母开头的64
位值,则可能是CLR
的System.DateTime
."08A"
始于1970
年,"08F"
时代结束于2056
年.
若要转换这些值为可读值
,请构造按构造或参数
传递64
位时间值的System.DateTime
对象.
4:DOS日期或时间格式
DOS
的日期/时间格式
是位掩码
:
|Y|Y|Y|Y|Y|Y|Y|M| |M|M|M|D|D|D|D|D| |h|h|h|h|h|m|m|m| |m|m|m|s|s|s|s|s|
按1980
年的偏移存储年份.秒按两秒
为增量存储.(因此,如果"秒"值为15
,则它表示30
秒.).用本地时间
记录这些值
.2002
年11
月26
日pst7:25p=0x2D7A9B20
.
若要转换
这些值为可读值,请通过DosDateTimeToFileTime
转换其为FILETIME
,然后再转换FILETIME
为可读内容
.
5:OLE自动化日期格式
OLE
自动化日期格式是个计算自1899
年12
月30
日午夜以来的天数的浮点值
.按小数天表示小时和分钟
.
在这些格式之间转换
一般两种格式
之间没有直接转换
;必须通过一些
中间格式.
往返Win32
文件时间的UNIX
时间戳
文件时间到/从系统时间
使用FileTimeToSystemTime()
和SystemTimeToFileTime()
.
FILETIME到或从System.DateTime
使用System.DateTime.FromFileTime()
和System.DateTime.ToFileTime()
.
OLE与System.DateTime相互转换
使用System.DateTime.FromOADate()
和System.DateTime.ToOADate()
.
DOS日期或时间到或从文件时间
使用DosDateTimeToFileTime()
和FileTimeToDosDateTime()
.
DOS日期/时间与系统时间
自己解析.
系统时间到或从OLE日期开始.
使用SystemTimeToVariantTime()
和VariantTimeToSystemTime()
,或使用VarDateFromUdate()
和VarUdateFromDate()
.
DOS日期/时间到/从OLE日期开始.
使用DosDateTimeToVariantTime()
和VariantTimeToDosDateTime()
.
如果允许使用MFC
,则还有更多可用
转换.
其他时间格式
JScript
的Date
对象构造器,可从表示自1970
年以来的毫秒
的整数构造
.除了乘以1000
外,与UNIX
时间相同.