2012-04-24 48 views
7

我想格式化字符串:「2012-04-20 10:10:00 + 0200」到這種格式的日期時間。 所以我認爲它一定是「yyyy-MM-dd hh:mm:ss zzz」?C#字符串DateTime與時區

時,我想這

// starttime = {20/04/2012 10:10:00} without my +0200! 
DateTime starttime = Convert.ToDateTime("2012-04-20 10:10:00+0200",CultureInfo.CurrentCulture); 
// And this gave me a format exception : {System.FormatException: String was not recognized as a valid DateTime. 
     DateTime result = DateTime.ParseExact("2012-04-20 10:10:00+0200", "yyyy-MM-dd hh:mm:ss zzz", CultureInfo.InvariantCulture); 

解決方案鑑於 「V4Vendetta」:

你應該嘗試使用,而不是一個DateTime

DateTimeOffset result = DateTimeOffset.Parse("2012-04-20 10:10:00+0200",CultureInfo.InvariantCulture); 

在這裏,你得到的偏移量的DateTimeOffset(2個小時)也可以用你的DateTime(10:10)值計算並得到你想要的輸出(result.DateTime + result.Offset)

+1

看看這裏:[鏈接](http://stackoverflow.com/questions/8754563/parse-string- datetime-containing-timezone-info) – Willem 2012-04-24 07:22:10

+1

據我所知,你的輸入應該是「2012-04-20 10:10:00 + 02:00」 – Ramesh 2012-04-24 07:23:41

+0

@Schaliasos beter? :) – user1264255 2012-04-24 08:47:09

回答

22

你應該嘗試使用DateTimeOffset代替DateTime

DateTimeOffset result = DateTimeOffset.Parse("2012-04-20 10:10:00+0200",CultureInfo.InvariantCulture); 

在這裏,你得到Offset(2小時),也可能與你的0123計算(10:10)值,並得到您想要的輸出(result.DateTime + result.Offset)

+0

謝謝!我會投票,但我還不能 – user1264255 2012-04-24 08:01:49

+0

很高興!你應該嘗試標記所有問題的答案*,這些答案幫助你*並鼓勵他人。 – V4Vendetta 2012-04-24 08:23:59

+0

這樣有用的東西! – Keerigan 2013-06-21 20:13:21

1

MSDN文章here似乎正是你要找的。每說的文章,你應該使用{0:MM/dd/yy H:mm:ss zzz}

1

使用 「2012-04-20 10:10:00 +02:00」,而不是「 」2012-04-20 10:10:00 + 0200「

+0

然後當我轉換爲日期時間時,我得到了相同的結果。 結果:// starttime = {20/04/2012 10:10:00} without my +0200 – user1264255 2012-04-24 07:29:22

+0

它應該已經在+02:00時區。請通過toString(「yyyy-MM-dd hh:mm:ss zzz」)檢查 – 2012-04-24 07:49:38

+0

這是正確的,但我真的需要它在DateTime中。 V4Vendetta給了我正確的解決方案。但仍然感謝您的幫助:) – user1264255 2012-04-24 08:04:26

0

試試這個:

DateTime datetime = DateTime.ParseExact("10/10/2009 12:00:00", "MM/dd/yyyy hh:mm:ss", System.Globalization.CultureInfo.CurrentCulture);