[英]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.