繁体   English   中英

c#DateTime.Parse 精度问题

[英]c# DateTime.Parse precision Issue

关于 C# 中 DateTime.Parse 精度的快速问题?

我有多个输入文件,我将它们合并到一个行列表中,然后我将按 DateTime 对其进行排序。

这很好,除了当毫秒只有 2 位数时 Parse 函数似乎错误地处理日期,在下面的情况下,它将 09:57:44.84 视为 09:57:44.840 而不是 09:57:44.084

            List<DateTime> lstUnOrdered = new List<DateTime>();

            lstUnOrdered.Add(DateTime.Parse("04/09/2020 09:57:44.573", CultureInfo.InvariantCulture));
            lstUnOrdered.Add(DateTime.Parse("04/09/2020 09:57:44.84", CultureInfo.InvariantCulture));

            var Ordered = lstUnOrdered.OrderBy(x => x.TimeOfDay);

            foreach (var item in Ordered)
            {
                Console.WriteLine(item.ToString("dd/MM/yyyy HH:mm:ss.fff"));
            }

运行时,您会得到以下输出

09/04/2020 09:57:44.573

09/04/2020 09:57:44.840

我期待这个输出

09/04/2020 09:57:44.084

09/04/2020 09:57:44.573

关于我可能出错的地方有什么建议吗?

谢谢

编辑:基于下面的评论,只是一些更新:

“从根本上说:产生这些值的任何东西都被破坏了,应该修复。如果这对你来说是不可能的,你应该在解析数据之前修补数据,在必要时插入额外的 0。“

-- 这是正确的,我无法控制数据。 但我知道输入文件中的顺序是:

09/04/2020 09:57:44.84

09/04/2020 09:57:44.573

这告诉我日期应该是 084 而不是 840,我不是在争论 Parse 是不正确的,只是寻找更精确地解析这些日期的替代方法,而不必先编写另一种方法来清理日期字符串。

我当然可以在 . 并在需要时添加 1 或 2 个零,希望 .Net 有一种内置的方式来使用 DateTime.Parse 或替代方法来做到这一点。

谢谢

只是一个更新,这将解决输入字符串错误的问题,以防有人想知道:

static void Main(string[] args)
    {
        List<DateTime> lstUnOrdered = new List<DateTime>();

        lstUnOrdered.Add(DateTime.Parse(MakeCorrectDate("04/09/2020 09:57:44.573"), 
 CultureInfo.InvariantCulture));
        lstUnOrdered.Add(DateTime.Parse(MakeCorrectDate("04/09/2020 09:57:44.84"), CultureInfo.InvariantCulture));

        var Ordered = lstUnOrdered.OrderBy(x => x.TimeOfDay);

        foreach (var item in Ordered)
        {
            Console.WriteLine(item.ToString("dd/MM/yyyy HH:mm:ss.fff"));
        }
    }

    private static string MakeCorrectDate(string strDate)
    {
        string[] milli = strDate.Split('.');

        return milli[0] + "." + milli[1].PadLeft(3, '0');
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM