C# - DateTime.FromFileTimeUtc到DateTime.FromFileTime

Gur*_*lam 6 .net c# timezone datetime utc

问题:

我有很多代码,在许多地方假设当地时间,并使用该功能DateTime.FromFileTime.

现在,我们的一些数据服务已经切换到UTC时间,我想知道是否有办法将UTC时间转换为本地时间?

在这两种情况下,我所有的都是长的,这是Windows文件的时间.如果我使用该FromFileTimeUtc函数,我输出的值是准确的,如果我没有那么它是错误的.

我不想改变我的所有代码,它说FromFileTimeFromFileTimeUtc.相反,我有一个转换层,我将进行此转换.

有任何想法吗?

Ale*_*Aza 4

var utcDateTime = DateTime.UtcNow;
var localDateTime = TimeZone.CurrentTimeZone.ToLocalTime(utcDateTime);
Run Code Online (Sandbox Code Playgroud)

[编辑]回答您的评论:“希望更改传递给 DateTime.FromFileTimeUtc 的长值..,以便在传递给 DateTime.FromFileTime 时给出相同的值”

private static long ConvertFileTimeToLocalTime(long fileTime)
{
    return fileTime + ((long)TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).TotalMilliseconds * 10000);
}
Run Code Online (Sandbox Code Playgroud)

测试:

var fileTime = DateTime.Now.ToFileTime();

var wrongTime = DateTime.FromFileTimeUtc(fileTime);

var correctTime = DateTime.FromFileTimeUtc(ConvertFileTimeToLocalTime(fileTime));
Run Code Online (Sandbox Code Playgroud)

  • 小问题:“ConvertFileTime”对于函数来说不是一个好名字。它没有说明它以哪种方式转换。这就是为什么您调用的 .Net 方法的名称中包含“FromX”和“ToY”。 (2认同)