C# - DateTime.FromFileTimeUtc to DateTime.FromFileTime

本文关键字:DateTime FromFileTime to FromFileTimeUtc | 更新日期: 2023-09-27 17:59:39

问题:

我有很多代码,在很多地方都假设当地时间,并使用函数DateTime.FromFileTime

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

在这两种情况下,我所拥有的都是一个长时间,即windows文件时间。如果我使用FromFileTimeUtc函数,那么我输出的值是准确的,如果我不使用,那么它就是错误的。

我不想将我的所有代码都更改为FromFileTimeFromFileTimeUtc。相反,我有一个转换层,我将在那里进行转换。

有什么想法吗?

C# - DateTime.FromFileTimeUtc to DateTime.FromFileTime

var utcDateTime = DateTime.UtcNow;
var localDateTime = TimeZone.CurrentTimeZone.ToLocalTime(utcDateTime);

[EDIT]要回答您的评论:"希望更改传递到DateTime.FromFileTimeUtc..中的长值,使其在传递到DateTime.FromFileTime中时给出相同的值"

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

测试:

var fileTime = DateTime.Now.ToFileTime();
var wrongTime = DateTime.FromFileTimeUtc(fileTime);
var correctTime = DateTime.FromFileTimeUtc(ConvertFileTimeToLocalTime(fileTime));