2011-10-26 64 views
0

如果我運行:從時間字符串獲取起源時間偏移

// 7:10 am at a location which has a +2 offset from UTC 
string timeString = "2011-06-15T07:10:25.894+02:00"; 
DateTime time = DateTime.Parse(timeString); 

它給了我time = 6/14/2011 10:10:25 PM。這是我所在的當地時間(太平洋時間,即UTC -7)。

是否有優雅獲取原點當地時間的方式,即6/15/2011 07:10:25 AM

+0

您的語法錯誤:或者您使用'DateTime time = DateTime.Parse(timeString)'或'DateTime.TryParse(timeString,out time)'。 – Marco

+0

謝謝Marco。固定。 – Nikhil

回答

2

DateTimeOffset結構似乎是專門處理時區。它包括DateTime類型的大部分功能。

string timeString = "2011-06-15T07:10:25.894+02:00"; 
DateTimeOffset time = DateTimeOffset.Parse(timeString); 

由於this article說明,你應該DateTimeOffset而不是DateTime每當你需要明確標識單個時間點。

0

您可以格式化DateTime爲Parse的方式。 例如,如果我想要的日期時間是在加拿大法語格式格式:

IFormatProvider culture = new CultureInfo("fr-CA", true); 
DateTime dt = DateTime.ParseExact(dateString, "dd-MM-yyyy", culture); 

你可以做到這一點的EN-US區域性同樣的方式,並添加時間格式指定你想要的格式..

+2

他在問時區 – SLaks

3

您可以使用TimeZoneInfo

DateTime localTime = DateTime.Now; 

TimeZoneInfo targetTimeZone = 
    TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
DateTime targetTime = TimeZoneInfo.ConvertTime(localTime, targetTimeZone); 

事實上,ConvertTimeBySystemTimeZoneId方法會更簡潔:

DateTime targetTime = 
    TimeZoneInfo.ConvertTimeBySystemTimeZoneId(localTime, "Eastern Standard Time"); 

可以使用TimeZoneInfo.GetSystemTimeZones()獲取信息可用時區。