我需要在我的网络应用程序中将时间转换为“UTC + 03:30时区”这里是UTC日期:
DateTime dt = DateTime.UtcNow;
是否有将UTC转换为我的时区的功能?如果ASP.NET中有一个函数,我不想让自己在我的应用程序中编写新函数。
应用程序可能托管在世界上不同的服务器上,这正是我使用UTC日期的原因。
我需要一个函数将3:30加到当前的UTC时间。
答案 0 :(得分:7)
你确定你的时区真的 UTC +3:30,一直没有夏令时吗?如果是这样,您可以使用适当的偏移(3.5小时)创建DateTimeOffset
。例如:
DateTimeOffset dtOffset = new DateTimeOffset(DateTime.UtcNow,
TimeSpan.FromHours(3.5));
当然,这会为您提供DateTimeOffset
而不是DateTime
......您可以使用它吗?
更好的解决方案是使用TimeZoneInfo
- 例如,您可以获得正确的时区并致电
DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, tzInfo);
...或者您可以使用TimeZoneInfo
但仍然可以获得DateTimeOffset
:
DateTimeOffset dto = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, tzInfo);
我个人建议您尽可能使用DateTimeOffset
,因为DateTime
的含义有些含糊不清且难以正确使用。
答案 1 :(得分:-1)
这可以让您将UTC转换为任何时区
Shared Function FromUTC(ByVal d As Date, ByVal tz As String) As Date
Return (TimeZoneInfo.ConvertTimeBySystemTimeZoneId(d, TimeZoneInfo.Utc.Id, tz))
end function
您可以使用
获取时区列表For Each timeZone As TimeZoneInfo In tzCollection
Console.WriteLine(" {0}: {1}", timeZone.Id, timeZone.DisplayName)
Next