2011-03-09 115 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

相關問題