我正在以下列格式从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对象?
答案 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.Parse
和TimeSpan.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}
,您可以根据需要使用DateTime
,LocalDateTime
或UtcDateTime
个属性。