var Result1 = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.Local)
var Result2 = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id));
这会将Utc时间转换为本地时间,这两种不同的结果或表现方式有什么不同吗?
哪个好?
为什么Microsoft不在样本here中直接使用TimeZoneInfo.Local(对于Result1)
答案 0 :(得分:1)
唯一的区别是,第二个是通过获取TimeZoneInfo
对象,获取它的id,并使用id再次查找同一个对象来绕道而行。
示例中的代码使用FindSystemTimeZoneById
方法的原因是它获取了已知id的TimeZoneInfo
对象,它没有从TimeZoneInfo
对象获取该id它已经有了。
答案 1 :(得分:0)
我认为将评论扩展到答案可能是值得的。
我有一个应用程序,其中在DB中配置了“本地”时区,它与服务器本身的本地时区无关。 (它在云服务器中运行)。 因此,使用 TimeZoneInfo.Local 对我不利。
我想要的是从DB读取应该使用的时区, 然后将时间从UTC转换为该时区。 因此我正在使用:
TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(GetTimeZoneId()));
GetTimeZoneId()从数据库读取。
答案 2 :(得分:0)
这是你将如何使用它们的问题。如果您需要本地以外的其他时区,则使用 TimeZoneInfo.FindSystemTimeZoneById()。如果您总是要使用当地时区,请使用 TimeZoneInfo.Local 。
在表现方面,我认为没有太大差异。但是,您可以尝试使用.NET Profiler或其他分析器对其进行分析,以查看这两者有多大差异。
答案 3 :(得分:0)