【问题标题】:DateTime.ParseExact omitting milliseconds in c#?DateTime.ParseExact 在 c# 中省略毫秒?
【发布时间】:2014-05-21 16:14:46
【问题描述】:

我正在尝试在 c# 中将字符串转换为日期时间。 字符串日期字符串= 2013/03/18 10:54:07.679

  1. 我试过DateTime dt=DateTime.ParseExact(datestring, "yyyy/MM/dd HH:mm:ss.fff",null); 结果是 {3/18/2013 10:54:07 AM}

  2. 我试过DateTime.TryParseExact(datestring,"yyyy/MM/dd HH:mm:ss.fff",CultureInfo.InvariantCulture,DateTimeStyles.None,out dttt); 结果是 {3/18/2013 10:54:07 AM}

在上述两种情况下,它都会省略毫秒(679)。

如何通过保持毫秒数将其正确转换为日期时间?

【问题讨论】:

  • 如果您想查看毫秒数,则必须以这种方式格式化 DateTime。不,调试器没有。这当然不是真正的问题。

标签: c# .net datetime


【解决方案1】:

您需要注意,当时间包含 2 位毫秒时,解析精确字符串 fff 将不起作用。

例如,在我的情况下,我有 2019-08-19 13:35:06.27 无法解析 但 2019-08-20 13:35:04.274 会正确解析。 我想它也会在 1 位数和 0 位数毫秒内发生。

仅当毫秒有尾随零时才有效。例如 .270

例子:

string x = "2019-08-20 13:35:04.27";
DateTime d;

bool result = DateTime.TryParseExact(x, "yyyy-MM-dd HH:mm:ss.fff", 
System.Globalization.CultureInfo.InvariantCulture, 
System.Globalization.DateTimeStyles.None, out d);

Console.WriteLine(result);

【讨论】:

  • 这符合预期。 fff 说“三位数”。 Exact 表示必须为 3 位数字。
【解决方案2】:

这并不是说您只是在通过调试器进行检查,并且调试器使用 AM 或 PM 显示它,它不显示毫秒部分。

试试这个:

DateTime dt=DateTime.ParseExact(datestring, "yyyy/MM/dd HH:mm:ss.fff",null);
Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss.fff"));

编辑:来自您的评论But I need the answer in Datetime instead of string

您已经拥有包括MilliSeconds 在内的日期时间,只是调试器没有显示,因为 (正如Ant P 的评论中提到的)调试器调用ToString() 方法的无参数重载,该方法显示DateTime 没有MilliSeconds。

【讨论】:

  • 具体来说,调试器只是调用无参数的ToString重载,其格式如问题所示。
  • 但我需要日期时间而不是字符串中的答案。
  • @user3661657 DateTime已经毫秒。 只是不是调试器显示的字符串表示形式。
  • @AntP:好点让我更新调试器调用无参数 ToString 重载。
  • @SudhakarTillapudi 重载,而不是构造函数;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多