我有一個以UTC(字符串類型)進來的UTC時間戳。我希望將此時間戳轉換爲東部時間。問題是當我在UTC時間戳上調用DateTime.Parse或Convert.ToDateTime時,它將它轉換爲我的本地時間,即中央時間。將UTC轉換爲東部時區
如何獲取字符串時間戳並將其轉換爲東部時間,而不管其運行的服務器的本地時間?
我有一個以UTC(字符串類型)進來的UTC時間戳。我希望將此時間戳轉換爲東部時間。問題是當我在UTC時間戳上調用DateTime.Parse或Convert.ToDateTime時,它將它轉換爲我的本地時間,即中央時間。將UTC轉換爲東部時區
如何獲取字符串時間戳並將其轉換爲東部時間,而不管其運行的服務器的本地時間?
我會嘗試剖析你的問題,但下一次請出示一些代碼,這樣每個人都可以看到究竟是什麼你的意思更清楚。
我有一個UTC時間戳來UTC(字符串類型)。
好吧,我假定你的意思是這樣的:
string utcString = "2014-02-25T12:34:56.000Z";
這是一個ISO-8601 UTC時間戳。如果是其他格式,請在評論中告訴我,我會相應地更新答案。
...問題是,當我打電話
DateTime.Parse
或Convert.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。
你精美地解析了我寫得不好的問題。謝謝你,先生。 – user1373121
夏令時呢?對不起,如果業餘問題 – donstack
@donstack - 沒問題。以上示例已經說明了夏令時。 「東部標準時間」的Windows時區ID名稱很差,應該只是「東部時間」。它包含了EST和EDT。有關更多示例,請參見[時區標記wiki](http://stackoverflow.com/tags/timezone/info)。 –
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.");
}
只有鏈接的答案是不鼓勵的... –
我發現了一個方便的解決方案:
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
我不確定,但你可以嘗試與文化。看看這個:http://msdn.microsoft.com/en-us/library/5hh873ya%28v=vs.90%29.aspx – George
@George - 文化與時區無關。他們不會影響他們一點。 –