Преобразование строки в DateTime - PullRequest
522 голосов
/ 28 мая 2009

Как преобразовать строку, такую ​​как 2009-05-08 14:40:52,531, в DateTime?

Ответы [ 13 ]

7 голосов
/ 27 февраля 2019

DateTime.Parse

Синтаксис:

DateTime.Parse(String value)
DateTime.Parse(String value, IFormatProvider provider)
DateTime.Parse(String value, IFormatProvider provider, DateTypeStyles styles)

Пример:

string value = "1 January 2019";
CultureInfo provider = new CultureInfo("en-GB");
DateTime.Parse(value, provider, DateTimeStyles.NoCurrentDateDefault););
  • Значение: строковое представление даты и времени.
  • Поставщик: объект, предоставляющий информацию о культуре.
  • Стили: параметры форматирования, которые настраивают синтаксический анализ строки для некоторых методов анализа даты и времени. Например, AllowWhiteSpaces - это значение, которое помогает игнорировать все пробелы, присутствующие в строке, при ее разборе.

Также стоит помнить, что DateTime - это объект, который хранится как номер внутри структуры, формат применяется к нему только при преобразовании его обратно в строку.

  • Разбор преобразования строки во внутренний тип числа.

  • Форматирование, преобразовывающее внутреннее числовое значение в читаемое строка.

Недавно у меня возникла проблема, когда я пытался преобразовать DateTime для передачи в Linq, поскольку я не понимал, что формат не имеет значения при передаче DateTime в запрос Linq.

DateTime SearchDate = DateTime.Parse(searchDate);
applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);

Полная документация DateTime

2 голосов
/ 23 февраля 2017

Поместите этот код в статический класс > public static class ClassName{ }

public static DateTime ToDateTime(this string datetime, char dateSpliter = '-', char timeSpliter = ':', char millisecondSpliter = ',')
{
   try
   {
      datetime = datetime.Trim();
      datetime = datetime.Replace("  ", " ");
      string[] body = datetime.Split(' ');
      string[] date = body[0].Split(dateSpliter);
      int year = date[0].ToInt();
      int month = date[1].ToInt();
      int day = date[2].ToInt();
      int hour = 0, minute = 0, second = 0, millisecond = 0;
      if (body.Length == 2)
      {
         string[] tpart = body[1].Split(millisecondSpliter);
         string[] time = tpart[0].Split(timeSpliter);
         hour = time[0].ToInt();
         minute = time[1].ToInt();
         if (time.Length == 3) second = time[2].ToInt();
         if (tpart.Length == 2) millisecond = tpart[1].ToInt();
      }
      return new DateTime(year, month, day, hour, minute, second, millisecond);
   }
   catch
   {
      return new DateTime();
   }
}

Таким образом, вы можете использовать

string datetime = "2009-05-08 14:40:52,531";
DateTime dt0 = datetime.TToDateTime();

DateTime dt1 = "2009-05-08 14:40:52,531".ToDateTime();
DateTime dt5 = "2009-05-08".ToDateTime();
DateTime dt2 = "2009/05/08 14:40:52".ToDateTime('/');
DateTime dt3 = "2009/05/08 14.40".ToDateTime('/', '.');
DateTime dt4 = "2009-05-08 14:40-531".ToDateTime('-', ':', '-');
1 голос
/ 24 октября 2017

Разные культуры мира пишут строки дат по-разному. Например, в США 20.01.2008 - 20 января 2008 года. Во Франции это вызовет исключение InvalidFormatException. Это потому, что Франция читает дату-время как День / Месяц / Год, а в США - Месяц / День / Год.

Следовательно, строка, подобная 20.01.2008, будет проанализирована до 20 января 2008 года во Франции, а затем вызовет исключение InvalidFormatException в США.

Чтобы определить текущие настройки культуры, вы можете использовать System.Globalization.CultureInfo.CurrentCulture.

string dateTime = "01/08/2008 14:50:50.42";  
        DateTime dt = Convert.ToDateTime(dateTime);  
        Console.WriteLine("Year: {0}, Month: {1}, Day: {2}, Hour: {3}, Minute: {4}, Second: {5}, Millisecond: {6}",  
                          dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond);  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...