2011-03-09 30 views
4

我需要时间来转换“UTC + 03:30时区”在我的web应用程序是在这里UTC日期:如何将UTC日期转换为我的时区?

DateTime dt = DateTime.UtcNow; 

是否有任何功能,UTC转换成我的时区或不?如果ASP.NET中有一个函数,我不想让自己在我的应用程序中编写一个新函数。

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

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

+0

你会怎么办时dayli ght节省时间会发生? – Axarydax 2011-03-09 07:44:31

+0

我不知道我对夏令时感到困惑保存是否有任何想法? – kamiar3001 2011-03-09 07:54:32

+0

我们不知道你为什么试图使用该时区,所以很难说。 UTC + 3:30有什么特别之处? – 2011-03-09 07:59:48

回答

7

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

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的含义有些模棱两可,很难正确使用。

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

+0

如果需要日期时间,您可以随时再次调用'dtoffset.DateTime' :)问题与DateTimeOffset是'System.ServiceModel.Syndication'之外,没有其他部分的BCL似乎使​​用它(类似于几乎没有任何东西使用'System.Uri',而是通常期望字符串。) – 2011-03-09 08:01:53

+0

@Michael:True,但我希望这只是在显示边界 - 在这种情况下,它只需要格式化。不幸的是,我们目前没有足够的信息:( – 2011-03-09 09:14:32

-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 
+0

这不是真的C# - 使用VB日期类型,但是它是吗?另外,我不相信* system *时区是OP想要使用。 – 2011-03-09 07:58:56

相关问题