我注意到无论我做什么,tofiletimeutc()
总是返回与toFileTime()
相同的内容。我需要生成一个UTC时间戳。所以我在Powershell中尝试了这个实验:
(get-date).tofiletime();
(get-date).touniversalTime().tofiletimeutc();
(get-date).tofiletimeutc();
,输出为:
129757574870723241
129757574870723241
129757574870723241
(所有3都是相同的本地时间戳。时区设置为太平洋)。
(get-date).touniversalTime()
按预期工作,但无论哪个" to-utc"我使用的功能,由于某种原因转换回本地时间。有谁看到发生了什么?
答案 0 :(得分:1)
是的,它确实有效,你看到的所有三个值都是“UTC”中的文件时间。
背景:
Windows FILETIME is defined as:“一个64位值,表示自1601年1月1日(UTC)以来100纳秒间隔的数量。”
DateTime.ToFileTime()
和DateTime.ToFileTimeUtc()
都返回基于UTC的值。
实际上,DateTime.ToFileTime()
已实现为DateTime.ToUniversalTime().ToFileTimeUtc()
。
更新关于评论:
如上所述,值总是相同的,当你将它转换回DateTime
实例时你“看到”并转储它,你使用哪种方法:
这两个返回“相同”的DateTime值DateTimeKind.Utc
,DateTime
值“已调整”为UTC。
[datetime]::FromFileTimeUtc((get-date).ToFileTime())
[datetime]::FromFileTimeUtc((get-date).ToFileTimeUtc())
这两个返回带有DateTimeKind.Local
的“相同”DateTime值,并将DateTime
值调整为local。
[datetime]::FromFileTime((get-date).ToFileTime())
[datetime]::FromFileTime((get-date).ToFileTimeUtc())