有人可以指出这个"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中的Format"20130913095509+10:00"
和它们之间的区别是什么"20130913095509+1000"
。
一些东西:
您最好将其解析为DateTimeOffset
而不是DateTime
。这样,您正在使用的计算机的本地时区就不会影响解析行为,并且您无需担心DateTimeStyles
or的疯狂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
请注意,您使用的格式接近于ISO 8601 “基本”格式,但是该格式将包括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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句