将yyyy-MM-ddTHH:mm:ss zzz格式的字符串转换为DateTime

时间:2016-04-18 16:30:49

标签: c# json date datetime

我正在以下列格式从Web服务收到JSON DateTime

yyyy-MM-ddTHH:mm:ss zzz

例如:

2016-04-18T15:09:21 01:00

但是,我无法将其转换为DateTime对象。我尝试过以下方法:

var date = DateTime.ParseExact("2016-04-18T15:09:21 01:00", "yyyy-MM-ddTHH:mm:ss zzz", CultureInfo.InvariantCulture);

var date2 = DateTimeOffset.ParseExact("2016-04-18T15:09:21 01:00", "yyyy-MM-ddTHH:mm:ss zzz", CultureInfo.InvariantCulture);

这两行都会使用以下消息抛出System.FormatException异常:

  

字符串未被识别为有效的DateTime。

如何解析2016-04-18T15:09:21 01:00作为DateTime对象?

2 个答案:

答案 0 :(得分:2)

不幸的是" zzz"期待在时区上签名。

这会奏效。

var date = DateTime.ParseExact("2016-04-18T15:09:21 +01:00", "yyyy-MM-ddTHH:mm:ss zzz",System.Globalization.CultureInfo.InvariantCulture);
date.Dump();

所以添加一个加号。

var dt="2016-04-18T15:09:21 01:00";
dt.Insert(20,"+").Dump();

答案 1 :(得分:0)

Dmitriy有正确答案,来自The "zzz" custom format specifier文档;

  

偏移 始终 显示带有前导符号。加号(+)   表示UTC之前的小时数,减号(-)表示小时数   在UTC之后。一位数的偏移量采用前导零格式化。

如果您的字符串始终采用yyyy-MM-ddTHH:mm:ss HH:mm格式,那么必须操纵它,如果您想将其解析为DateTimeOffset

我建议您使用空格分割字符串,在这些字符串上调用DateTime.ParseTimeSpan.Parse,并在DateTimeOffset(DateTime, TimeSpan) constructor中使用这些值;

  

使用。初始化DateTimeOffset结构的新实例   指定的DateTime值和offset

var str = "2016-04-18T15:09:21 01:00";
var parts = str.Split(' ');
var date = DateTime.Parse(parts[0]);
var offset = TimeSpan.Parse(parts[1]);
var dto = new DateTimeOffset(date, offset);

现在您的DateTimeOffset{18.04.2016 15:09:21 +01:00},您可以根据需要使用DateTimeLocalDateTimeUtcDateTime个属性。

enter image description here

相关问题