C#中的DateTime.ParseExact方法如何忽略毫秒?

8
我正在尝试将一个字符串转换为C#中的日期时间格式。 字符串为:2013/03/18 10:54:07.679。
我已经尝试了两种方法: 1. 使用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)。
请问如何正确地将其转换为带有毫秒数的日期时间格式?

3
如果你想看到毫秒数,那么你需要以这种方式格式化DateTime。 而且,调试器不会显示毫秒数。当然,这不是一个真正的问题。 - Hans Passant
3个回答

21

不是忽略你,只是通过调试程序来检查。调试程序显示使用上午或下午,但不显示毫秒部分。

尝试这个:

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

编辑: 根据你的评论 但我需要答案是DateTime而不是字符串

你已经有了包括毫秒在内的DateTime,只是调试器没有显示,因为 (正如Ant P在评论中提到的那样)调试器调用了ToString()方法的无参数重载,该方法显示不带毫秒的DateTime


2
具体来说,调试器只调用无参数的“ToString”重载,其格式如问题所示。 - Ant P
但我需要的答案是日期时间,而不是字符串。 - user3661657
@user3661657 DateTime已经包含了毫秒。只是调试器显示的字符串表示中没有展示出来。 - Ant P
@AntP:好的,让我更新一下,调试器调用无参数 ToString 重载。 - Sudhakar Tillapudi
@Sudhakar...非常感谢您。您是正确的。当我将其保存到数据库时,它显示了毫秒。谢谢。 - user3661657
显示剩余3条评论

4

请注意,精确解析字符串"fff"在时间包含两位毫秒的情况下将无法工作。

例如,在我的案例中,我有一个日期时间"2019-08-19 13:35:06.27",它无法解析,但是"2019-08-20 13:35:04.274"可以正确解析。我认为对于一位和零位毫秒也会出现这种情况。

只有当毫秒具有尾随零时才有效。例如:".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位数。 - mjwills

2

目前您的回答不够清晰,请[编辑]以添加更多细节,以帮助其他人了解它如何回答所问的问题。您可以在帮助中心找到有关编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接