.NET中的custom date strings允许您使用fffffff
解析具有7个小数部分的日期我需要解析从Oracle SQL Developer导出的数据,如下所示:
15-OCT-08 15.36.16.280000000
我计算了九个小数部分,但fffffffff
不是有效的日期格式。事实上:
? DateTime.Now.ToString("dd-MMM-yy HH.mm.ss.fffffffff")
抛出异常,并显示消息“输入字符串格式不正确”。
我如何优雅地解析我的日期?
答案 0 :(得分:1)
为什么不DateTime.Now.ToString(“dd-MMM-yy HH.mm.ss.fffffff00”)?无论如何,第二个百万分之一的第二个也没有意义。
要解析,请使用DateTime.ParseExact(s.Substring(0,s.Length - 2));
答案 1 :(得分:1)
这不优雅,但我打赌你不能得到更好的东西。 (好吧,直到Jon或Mark告诉我们)
using System.Globalization;
/* ... */
string d = "15-OCT-08 15.36.16.280000000";
DateTime dt = DateTime.ParseExact(d.Substring(0,d.Length-2),
"dd-MMM-yy HH.mm.ss.fffffff",CultureInfo.InvariantCulture);
答案 2 :(得分:0)
我会在解析它时修剪字符串,这样只有4个小数位。看起来附加数据无论如何都不是有效数字。然后当你写出来时,使用:
.ToString("dd-MMM-yy HH.mm.ss.ffff")
答案 3 :(得分:0)
如果你总是得到一个固定大小的字符串,你可以:
var trimmedDate = oracleDate.Substring(0, oracleDate.Length - 2);
var dateFormat = "dd-MMM-yy HH.mm.ss.fffffffff";
DateTime.ParseExact(trimmedDate, dateFormat, CultureInfo.InvariantCulture)
这可能会进入一个方法 - ParseOracleDate(oracleDateString)
答案 4 :(得分:0)
DateTime在内部实现为DateTime.MinValue的100纳秒间隔计数。这是此类可能达到的最高精度级别,因此解析此后的其他数字将无效。