Как преобразовать короткую строку даты обратно в объект DateTime? - PullRequest
3 голосов
/ 15 декабря 2009

У меня есть 2 объекта DateTime, которые я сохраняю в файл после использования функции ToShortDateString (); строки выглядят как «15.12.2009». Я застрял в этой части сейчас, я хочу инициализировать объекты DateTime с этими строками, чтобы я мог сравнить промежуток времени между датами даты. Любая помощь приветствуется.

Ответы [ 5 ]

7 голосов
/ 15 декабря 2009

Вы можете попробовать

DateTime date = DateTime.ParseExact("12/15/2009", "MM/dd/yyyy", null);

Посмотрите на

2 голосов
/ 15 декабря 2009

Предполагается, что вы читаете даты из файла в строковом формате

string date1 = "28/12/2009"; //this will be from your file
string date2 = "29/12/2009"; //this will be from your file
DateTime d1 = DateTime.ParseExact(date1,"dd/MM/yyyy", null);
DateTime d2 = DateTime.ParseExact(date2, "dd/MM/yyyy", null);
TimeSpan t1 = d2.Subtract(d1);
1 голос
/ 15 декабря 2009

Я обычно стараюсь придерживаться этого при работе с DateTime / string переходами:

  • Если даты сохраняются в текстовом формате, отформатируйте их явно. Предпочтительно в стандартизированном формате (например, ISO 8601 ).
  • При чтении даты назад, анализируйте ее для объекта DateTime, используя тот же явно определенный формат.

Таким образом, ваш код не потерпит неудачу при использовании в местах, где формат даты отличается от вашего, или если файл создан в одной локали, а затем проанализирован в другой.

private static string DateToString(DateTime input)
{
    return input.ToString("yyyy-MM-dd");
}

private static DateTime StringToDate(string input)
{
    return DateTime.ParseExact(input, "yyyy-MM-dd", CultureInfo.InvariantCulture);
}
0 голосов
/ 15 декабря 2009

Извлечь год, месяц и день, а затем использовать что-то вроде:

var dt = new DateTime(Year,Month,Day)

или создайте метод расширения для преобразования обратно в dateTime строк этого типа, но в общем случае тело метад расширения должно быть чем-то вроде этого.

0 голосов
/ 15 декабря 2009

Вы пробовали DateTime.Parse(str)?

...