我正在尝试找出以下给定日期时间文字的正确字符串格式:
18-JUN-13 12.17.36.000000000
使用MSDN,我设法编写了以下格式:
"d'-'MMM'-'y'T'h'.'m'.'s'.'fff"
但是当使用
DateTime.ParseExact
时,解析失败并显示FormatException
:String was not recognized as a valid DateTime.
我的代码:
DateTime.ParseExact("18-JUN-13 12.17.36.000000000", "d'-'MMM'-'y'T'h'.'m'.'s'.'fff", null);
你可以使用
dd-MMM-yy hh.mm.ss.fffffff
InvariantCulture
。我现在在手机上,所以我不能尝试:(
AFAIK,毫秒部分解析限制是
7
,这就是为什么你不能解析你的字符串without操纵它。你可以像这样使用它;
var dt = DateTime.ParseExact("18-JUN-13 12.17.36.0000000",
"dd-MMM-yy HH.mm.ss.fffffff",
CultureInfo.InvariantCulture);
"fffffff"
自定义格式作为毫秒的顶级字符。来自文档;
虽然可以显示百万分之一秒 时间值的组成部分,该值可能没有意义。这 日期和时间值的精度取决于 系统时钟。在 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);
您不能直接解析(即
ParseExact()
)小数点后超过七位的时间字符串除非,正如juharr对DateTime格式的评论所建议的那样抛出异常,您将多余的数字解析为文字字符:
string before = "18-JUN-13 12.17.36.000000000";
string format = "d'-'MMM'-'y' 'h'.'m'.'s'.'fffffff'00'";
DateTime value = DateTime.ParseExact(before, format, null);
string after = value.ToString(format);
Console.WriteLine(before);// 18-JUN-13 12.17.36.000000000
Console.WriteLine(after); // 18-Jun-13 12.17.36.000000000
否则,您需要截断多余的数字,如 Soner Gönül 的回答。
不幸的是,异常消息和文档都没有指出为什么
fffffff
/FFFFFFF
是极限,因为原因很简单但容易被忽视。
0.0000001
秒是:
刻度是
DateTime
可以表示的最小间隔。 ffffffff
(八位有效数字)及以后的格式字符串无效,因为这需要 DateTime
才能存储小数点。虽然“String was not recognized as a valid DateTime”does描述了问题,在这种情况下,不仅仅是输入不匹配指定的格式,而且输入不能用DateTime
精确表示
,无论如何。
你有一堆格式不正确的单引号。试试这个
DateTime.ParseExact("18-JUN-13 12.17.36.000000000", "d-MMM-yTh.m.s.fff", null);