【问题标题】:How to parse string with long milliseconds (nanoseconds) part to DateTime?如何将长毫秒(纳秒)部分的字符串解析为 DateTime?
【发布时间】:2015-02-09 12:17:46
【问题描述】:

我正在尝试找出以下给定日期时间文字的正确字符串格式:

18-JUN-13 12.17.36.000000000

使用MSDN,我设法编写了以下格式:

"d'-'MMM'-'y'T'h'.'m'.'s'.'fff"

但是当使用DateTime.ParseExact 时,解析失败并出现FormatException字符串未被识别为有效的日期时间

我的代码:

DateTime.ParseExact("18-JUN-13 12.17.36.000000000", "d'-'MMM'-'y'T'h'.'m'.'s'.'fff", null);

【问题讨论】:

    标签: c# string datetime


    【解决方案1】:

    你可以使用

    dd-MMM-yy hh.mm.ss.fffffff
    

    以英语为基础文化,例如InvariantCulture。我现在在手机上,所以我无法尝试:(

    AFAIK,毫秒部分的解析限制是7,这就是为什么你不能在没有操作的情况下解析你的字符串。你可以像这样使用它;

    var dt = DateTime.ParseExact("18-JUN-13 12.17.36.0000000",
                                 "dd-MMM-yy HH.mm.ss.fffffff",
                                 CultureInfo.InvariantCulture);
    

    看起来这就是为什么我们可能将The "fffffff" custom format 作为毫秒的顶部字符。来自文档;

    虽然可以显示百万分之一秒 时间值的组成部分,该值可能没有意义。这 日期和时间值的精度取决于分辨率 系统时钟。在 Windows NT 3.5(及更高版本)和 Windows Vista 上 操作系统,时钟的分辨率约为 10-15 毫秒。

    你问过;

    你会如何操作字符串?

    好吧,一种获取逗号的最后一个索引并将其子字符串化为 8 个索引的方法;

    string s = "18-JUN-13 12.17.36.000000000";
    var dateString = s.Substring(0, s.LastIndexOf(".") + 8);
    

    【讨论】:

    • 'f' 格式化程序的重要之处在于它代表亚秒精度的一位数。它必须匹配输入的小数位数才能匹配 ParseExact。
    • 你试过了吗?看来您不能使用 9f。输入字符串的长度也必须匹配。
    • 其实限制是7。7f之后会给你一个例外。
    • @TimSchmelter 你是对的。我现在在手机上,所以我无法正确尝试。看起来毫秒解析的限制是7。我认为我的第二个示例会起作用。
    • @BerinLoritsch 是的,你是对的。因为是手机,第一次写不出来。谢谢。
    【解决方案2】:

    你有一堆单引号,格式不正确。试试这个

    DateTime.ParseExact("18-JUN-13 12.17.36.000000000", "d-MMM-yTh.m.s.fff", null);
    

    【讨论】:

    • 注意:除非您使用单引号,否则日期时间格式化程序可能会将破折号更改为不同的区域设置特定分隔符,例如斜杠。当有人更改其默认语言环境后解析器开始失败时,我被这个咬了。
    猜你喜欢
    • 2015-11-14
    • 2012-06-16
    • 2019-08-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多