2014-02-26 89 views
5

我有一個以UTC(字符串類型)進來的UTC時間戳。我希望將此時間戳轉換爲東部時間。問題是當我在UTC時間戳上調用DateTime.Parse或Convert.ToDateTime時,它將它轉換爲我的本地時間,即中央時間。將UTC轉換爲東部時區

如何獲取字符串時間戳並將其轉換爲東部時間,而不管其運行的服務器的本地時間?

+0

我不確定,但你可以嘗試與文化。看看這個:http://msdn.microsoft.com/en-us/library/5hh873ya%28v=vs.90%29.aspx – George

+0

@George - 文化與時區無關。他們不會影響他們一點。 –

回答

7

我會嘗試剖析你的問題,但下一次請出示一些代碼,這樣每個人都可以看到究竟是什麼你的意思更清楚。

我有一個UTC時間戳來UTC(字符串類型)。

好吧,我假定你的意思是這樣的:

string utcString = "2014-02-25T12:34:56.000Z"; 

這是一個ISO-8601 UTC時間戳。如果是其他格式,請在評論中告訴我,我會相應地更新答案。

...問題是,當我打電話DateTime.ParseConvert.ToDateTime在UTC時間戳,它是將其轉換爲我的本地時間,這是中部時間。

DateTime utcDateTime = DateTime.Parse(utcString, 
             CultureInfo.InvariantCulture, 
             DateTimeStyles.RoundtripKind); 

RoundtripKind風格告訴解析器查找輸入字符串「厚道」的信息,如指示UTC的Z。結果DateTime將具有原始值,並且它的.Kind屬性設置爲DateTimeKind.Utc

...我想將此時間戳轉換爲東部時間。

既然您有UTC DateTime,那麼您可以使用TimeZoneInfo類輕鬆轉換它。

TimeZoneInfo easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById(
                 "Eastern Standard Time"); 

DateTime easternDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, 
                  easternTimeZone); 

就是這樣。結果是DateTime包含美國東部時區的當地時間。由於時區信息未與DateTime對象一起攜帶,因此實物爲Unspecified

另請注意,「東部標準時間」是指整個美國東部時區,包括EST和EDT。

+0

你精美地解析了我寫得不好的問題。謝謝你,先生。 – user1373121

+0

夏令時呢?對不起,如果業餘問題 – donstack

+0

@donstack - 沒問題。以上示例已經說明了夏令時。 「東部標準時間」的Windows時區ID名稱很差,應該只是「東部時間」。它包含了EST和EDT。有關更多示例,請參見[時區標記wiki](http://stackoverflow.com/tags/timezone/info)。 –

2

Take a look here at the documentation.

基本上你需要使用TimeZoneInfo.FindSystemTimeZoneById("<Timezone>"); 然後使用該作爲ConvertTime函數的第三個參數。參數2是您當前的時區。

DateTime hwTime = new DateTime(2007, 02, 01, 08, 00, 00); 
try 
{ 
    TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time"); 
    Console.WriteLine("{0} {1} is {2} local time.", 
      hwTime, 
      hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName, 
     TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local)); 
} 
catch (TimeZoneNotFoundException) 
{ 
    Console.WriteLine("The registry does not define the Hawaiian Standard Time zone."); 
}       
catch (InvalidTimeZoneException) 
{ 
    Console.WriteLine("Registry data on the Hawaiian STandard Time zone has been corrupted."); 
} 
+1

只有鏈接的答案是不鼓勵的... –

0

我發現了一個方便的解決方案:

var e_europe = TimeZoneInfo.FindSystemTimeZoneById("E. Europe Standard Time"); 
var utcnow = DateTime.UtcNow; 
Console.WriteLine(utcnow.ToString()); 
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(utcnow, e_europe).ToString()); 

它打印

2/26/2014 1:03:43 AM 
2/26/2014 3:03:43 AM 
相關問題