2012-04-24 59 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);