Обработка даты в .NET: синтаксический анализ 15 октября 2012 г. 15.36.16.280000000 - PullRequest
1 голос
/ 22 сентября 2009

пользовательские строки даты в .NET позволяют анализировать дату с семью дробными долями секунды, используя fffffff Мне нужно проанализировать данные, экспортированные из Oracle SQL Developer, которые выглядят следующим образом:

15-OCT-08 15.36.16.280000000

Я считаю девять дробных частей, но fffffffff не является допустимым форматом даты. На самом деле:

? DateTime.Now.ToString("dd-MMM-yy HH.mm.ss.fffffffff")

выдает исключение с сообщением «Входная строка была не в правильном формате».

Как мне элегантно разобрать даты?

Ответы [ 5 ]

1 голос
/ 22 сентября 2009

Это не элегантно, но держу пари, что ты не можешь получить ничего лучше. (Ну, пока Джон или Марк не покажут нам)

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);
1 голос
/ 22 сентября 2009

Почему бы не DateTime.Now.ToString ("дд-ммм-гг чч.мм.сс.ффффффф00")? Последние 100 миллиардов секунд не будут иметь никакого значения.

Для анализа используйте DateTime.ParseExact (s.Substring (0, s.Length - 2));

0 голосов
/ 22 сентября 2009

DateTime реализован внутренне как счетчик интервалов в 100 наносекунд от DateTime.MinValue. Это самый высокий уровень точности, возможный для этого класса, поэтому анализ дополнительных цифр после этого не даст никакого эффекта.

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

0 голосов
/ 22 сентября 2009

Если вы всегда получаете строку фиксированного размера, вы можете:

var trimmedDate = oracleDate.Substring(0, oracleDate.Length - 2);
var dateFormat = "dd-MMM-yy HH.mm.ss.fffffffff";
DateTime.ParseExact(trimmedDate, dateFormat,  CultureInfo.InvariantCulture)

Это могло бы войти в метод

0 голосов
/ 22 сентября 2009

Я бы просто урезал строку при разборе, чтобы было только 4 знака после запятой. Похоже, что дополнительные данные в любом случае не являются значащими цифрами. Затем, когда вы пишете это, используйте:

.ToString("dd-MMM-yy HH.mm.ss.ffff")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...