我如何将UTC日期转换为我的时区?

kam*_*001 4 c# asp.net

我需要在我的网络应用程序中将时间转换为"UTC + 03:30时区"这里是UTC日期:

DateTime dt = DateTime.UtcNow;
Run Code Online (Sandbox Code Playgroud)

有没有将UTC转换为我的时区的功能?如果ASP.NET中有一个函数,我不想让自己在我的应用程序中编写一个新函数.

该应用程序可能托管在世界上的不同服务器中,这正是我使用UTC日期的原因.

我需要一个函数将3:30加到当前的UTC时间.

Jon*_*eet 7

你确定你的时区真的是UTC +3:30,一直没有夏令时吗?如果是这样,您可以DateTimeOffset使用适当的偏移(3.5小时)创建一个.例如:

DateTimeOffset dtOffset = new DateTimeOffset(DateTime.UtcNow,
                                             TimeSpan.FromHours(3.5));
Run Code Online (Sandbox Code Playgroud)

当然,这给你一个DateTimeOffset而不是DateTime......你能使用它吗?

更好的解决方案是使用TimeZoneInfo- 例如,您可以获得正确的时区和呼叫

DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, tzInfo);
Run Code Online (Sandbox Code Playgroud)

...或者你可以使用TimeZoneInfo但仍然得到DateTimeOffset:

DateTimeOffset dto = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tzInfo);
Run Code Online (Sandbox Code Playgroud)

我个人会建议你使用,DateTimeOffset如果你可以,因为它的含义DateTime有点含糊不清,很难正确使用.

不幸的是,.NET的日期和时间处理有点混乱:(我有一个名为Noda Time的项目,如果我们完成它会改善事态,但它目前还远没有生产就绪.