DateTime.toFileTimeUtc实际上有用吗?我无法生成UTC文件时间

时间:2012-03-09 09:09:52

标签: .net powershell

我注意到无论我做什么,tofiletimeutc()总是返回与toFileTime()相同的内容。我需要生成一个UTC时间戳。所以我在Powershell中尝试了这个实验:

(get-date).tofiletime();
(get-date).touniversalTime().tofiletimeutc();
(get-date).tofiletimeutc();

,输出为:

129757574870723241
129757574870723241
129757574870723241

(所有3都是相同的本地时间戳。时区设置为太平洋)。

(get-date).touniversalTime()按预期工作,但无论哪个" to-utc"我使用的功能,由于某种原因转换回本地时间。有谁看到发生了什么?

1 个答案:

答案 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.UtcDateTime值“已调整”为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())