2011-12-09 167 views
7

我有這個UTC + 0日期:如何將UTC + 0日期轉換爲PST日期?

2011-11-28T07:21:41.000Z 

,我想,在C#中,將其轉換爲PST日期。我該怎麼做?試着用:

object.Data.ToLocalTime() 

,但我不能得到正確的值(應爲2011-11-26)

編輯

也試過(另一個話題suggesion後)這一點:

DateTime convertedDate = DateTime.SpecifyKind(
    DateTime.Parse(object.Data.ToShortDateString()), 
    DateTimeKind.Utc);      

DateTime dt = convertedDate.ToLocalTime(); 
string dataVideo = dt.ToShortDateString(); 

但日期仍然28/11/2011,並不是27/11/2011

+0

檢查此問題:http://stackoverflow.com/questions/179940/c-sharp-convert-utc-gmt-time-to-local-time – Nayan

+0

嘗試了一些策略,如'DateTime.Parse(object。 Data.ToShortDateString())。ToLocalTime()'但沒有任何反應...... – markzzz

+0

我沒有看到失敗模式,只有一個:檢查你的機器實際上是否在PST時區。記錄你得到的時間,而不僅僅是日期。 –

回答

11

我已經改變了我的時鐘使用UTC-08:00 Pacific Time

DateTime timestamp = DateTime.Parse("2011-11-28T07:21:41.000Z"); 
Console.WriteLine("UTC: " + timestamp.ToUniversalTime()); 
Console.WriteLine("PST: " + timestamp.ToLocalTime()); 

輸出:

UTC: 28/11/2011 7:21:41 
PST: 27/11/2011 23:21:41 

實施例與TimeZoneInfo

DateTime timestamp = DateTime.Parse("2011-11-28T07:21:41.000Z"); 
Console.WriteLine("UTC: " + timestamp.ToUniversalTime()); 
Console.WriteLine("GMT+1: " + timestamp.ToLocalTime()); 
Console.WriteLine("PST: " + TimeZoneInfo.ConvertTimeBySystemTimeZoneId(timestamp, "Pacific Standard Time")); 

輸出:

UTC: 28/11/2011 7:21:41 
GMT+1: 28/11/2011 8:21:41 
PST: 27/11/2011 23:21:41 
+0

首先,我不能放棄Z(我不會在日期上獲得一個字符串替換,這太可怕了)。其次,不,它沒有辦法訣竅:日期仍然是28/11/2011,在PST上是2011年2月27日(前12小時)。 – markzzz

+1

沒關係丟Z.我已經更新了答案。據我所知,PST是UTC-08:00,而不是UTC-12:00? – Stijn

+0

:O!但我需要打印該值,而無需更改計算機的時鐘:)是否有將UTC(我的日期)中的某個日期轉換爲PST日期的方法?是的,對不起,是UTC-08:00,UTC-12:00應該是PDT ... – markzzz

1

多一點色彩

2011-11-28T07:21:41.000Z

這是一個ISO8601時間戳,在最後的Z代表UTC。這代表了一個特定的實例。

DateTime.Parse將返回給您一個本地日期時間結構,有三種類型的日期時間類型,UTC,本地和未指定。

如果你嘗試顯示這個,它會告訴你這個瞬間在你的電腦當前時區(我是東部時間,所以當我打印它時,我得到11/28/2011 2:21:41 AM)。

如果我想這個日期Kind切換到UTC,我可以做類似

DateTime.Parse("2011-11-28T07:21:41.000Z").ToUniversalTime()

印刷本,現在(因爲它是一種現在UTC)我得到11/28/2011 7:21:41 AM

請注意,雖然時間打印的方式不同,但這兩個日期時間都指的是同一時間點。

要在不同的時區顯示此即時信息,最簡單的方法是TimeZoneInfo類(儘管我不確定它是否100%準確)。

TimeZoneInfo.ConverTimeBySystemTimeZoneId(dateTime, "Pacific Standard Time").

現在打印它會產生你想要的結果11/27/2011 11:21:41 PM

注意,這回的DateTime的Kind屬性現在Unspecified,這意味着你將無法將其傳送回UTC沒有更多的信息。你不再有特定的時間,而是你有一個不確定的時間..我們知道它和以前剛剛在太平洋時間的瞬間是一樣的,但電腦不知道這一點。記住這一點,如果你想這次存儲。