.NET日期处理:解析15-OCT-08 15.36.16.280000000

时间:2009-09-22 16:30:05

标签: .net oracle datetime parsing

.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")

抛出异常,并显示消息“输入字符串格式不正确”。

我如何优雅地解析我的日期?

5 个答案:

答案 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纳秒间隔计数。这是此类可能达到的最高精度级别,因此解析此后的其他数字将无效。

http://www.eggheadcafe.com/articles/20021111.asp