问题:
我有很多代码,在很多地方都假设当地时间,并使用函数DateTime.FromFileTime
。
现在,我们的一些数据服务已经切换到UTC时间,我想知道是否有办法将UTC时间转换为当地时间?
在这两种情况下,我所拥有的都是一个长时间,即windows文件时间。如果我使用FromFileTimeUtc
函数,那么我输出的值是准确的,如果我不使用,那么它就是错误的。
我不想将我的所有代码都更改为FromFileTime
到FromFileTimeUtc
。相反,我有一个转换层,我将在那里进行转换。
有什么想法吗?
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));