有人可以指出这个"20130913095509+1000"
日期时间表示.NET中的哪种格式。
我可以使用以下代码对此进行解析
string test= "20130913095509+1000";
DateTime parseDt = DateTime.ParseExact(test,
"yyyyMMddhhmmsszzzz",
CultureInfo.InvariantCulture);
//For comparison
string output= parseDt.ToString("yyyyMMddhhmmsszzzz");
//output= 20130913095509+10:00
.NET中"20130913095509+10:00"
和"20130913095509+1000"
之间的格式有什么区别。
答案 0 :(得分:1)
几件事:
最好将其解析为DateTimeOffset
而不是DateTime
。这样,您正在使用的计算机的本地时区就不会影响解析行为,并且您无需担心DateTimeStyles
或DateTimeKind
的疯狂。由于DateTimeOffset
保留了您提供的偏移量,因此它将在从字符串到对象到字符串再到字符串的往返过程中保持不变。
zzzz
不是有效的格式说明符。某些实现似乎很荣幸,但是可能发生的情况是zzz
和z
被分别解释,而后者被忽略。
不幸的是,没有格式说明符表示带符号,小时和分钟的不带冒号的偏移量。 zzz
是最接近的,在使用ToString
进行格式化时会包含冒号,但是在使用ParseExact
进行解析时会将其视为可选。因此,您可以在格式字符串中使用zzz
,但必须在:
调用之后手动删除ToString
。
将其放在一起:
string test = "20130913095509+0530";
DateTimeOffset dto = DateTimeOffset.ParseExact(test, "yyyyMMddHHmmsszzz", CultureInfo.InvariantCulture);
string output = dto.ToString("yyyyMMddHHmmsszzz").Remove(17,1);
Console.WriteLine(output); //=> 20130913095509+0530
请注意,您使用的格式接近the documentation“基本”格式,但是日期和时间部分之间应包含T
分隔符。如果可能的话,您应该考虑插入T
,以使您的数据符合ISO 8601。
string test = "20130913T095509+0530";
DateTimeOffset dto = DateTimeOffset.ParseExact(test, "yyyyMMdd'T'HHmmsszzz", CultureInfo.InvariantCulture);
string output = dto.ToString("yyyyMMdd'T'HHmmsszzz").Remove(18,1);
Console.WriteLine(output); //=> 20130913T095509+0530