【发布时间】:2018-11-13 11:57:51
【问题描述】:
我从第三方获得了我想转换为 DateTime 的字符串:
“2018 年 11 月 13 日 16:08:52:000:000:000”
我已经尝试了这些选项,但 FormatException 被抛出:
System.DateTime.ParseExact("12 NOV 2018 16:08:52:000:000:000",
"dd MMM yyyy HH:mm:ss:fff:ffffff:fffffffff",
CultureInfo.InvariantCulture)
当我使用这个时,同样的例外:
System.DateTime.ParseExact("12 NOV 2018 16:08:52:000:000:000",
"dd MMM yyyy HH:mm:ss:fff", CultureInfo.InvariantCulture)
是否有一种干净的方法可以按原样解析它,或者我需要使用像string.Split(new []{':'}) 这样的脏方法?
注意:
- 对于我的业务需求,我不需要微/纳秒的部分。
- 由于这种解析操作在一秒钟内发生多次,因此效率是关键因素。
更新
我选择了@Tim 的建议来进行字符串操作:
string date = "12 NOV 2018 16:08:52:000:000:000";
date = date.Remove(date.Remove(date.LastIndexOf(':')).LastIndexOf(':'));
DateTime result = System.DateTime.ParseExact(date, "dd MMM yyyy HH:mm:ss:fff", System.Globalization.CultureInfo.InvariantCulture);
原因:
- 我不能保证
date字符串的结构,因为它来自第三方。所以使用格式模式dd MMM yyyy HH:mm:ss:fff:fff:fff会很危险 - 正如@Jeroen Mostert 所写,当您使用
DateTime.ParseExact()时,字符串拆分的使用并不是关键因素
另外,如果您真的认为效率如此重要,请不要假设对 DateTime.ParseExact 的任何一次调用都会“快速”,或者您所做的任何字符串拆分都会成为瓶颈。
【问题讨论】:
-
微秒和纳秒总是为零吗?
-
如果效率是一个关键因素,请考虑从根本上解决问题并让系统输出一种在任何地方都可以轻松解析的格式——比如绝对滴答声。我知道这些事情的答案通常是“不,我不能改变任何”,但话说回来,现实世界的问题是你拒绝应用有效解决方案时留下的问题,所以它总是值得的试。此外,如果您真的认为效率如此重要,请不要假设对
DateTime.ParseExact的任何一次调用都会“快速”,或者您所做的任何字符串拆分都会成为瓶颈。 -
仅供参考,我已编辑 my answer 以展示删除不必要部分的方法。
-
@themehio 因为它来自第三方,我不能保证微/纳米永远是零。
标签: c# datetime datetime-format