Формат даты и времени из строки? - PullRequest
5 голосов
/ 24 октября 2008

Как мне преобразовать строку в формат DateTime? Например, если бы у меня была строка вроде:

"24/10/2008"

Как мне перевести это в формат DateTime?

Ответы [ 5 ]

12 голосов
/ 24 октября 2008

Использовать DateTime.ParseExact :

string str = "24/10/2008";
DateTime dt = DateTime.ParseExact(str, "dd/MM/yyyy", 
                                  Thread.CurrentThread.CurrentCulture);

(Вы должны подумать о том, в какой культуре вы на самом деле хотите ее проанализировать, по общему признанию.)

РЕДАКТИРОВАТЬ: В других ответах в качестве третьего параметра указано «null» - это эквивалентно использованию Thread.CurrentThread.CurrentCulture.

Подробнее о других форматах см. «Строки пользовательских форматов даты и времени» в MSDN.

4 голосов
/ 24 октября 2008

Если вы не знаете формат, используйте:

DateTime d = DateTime.Parse(dateString);

Это пытается проанализировать строковое представление даты и времени, используя правила форматирования текущей культуры (например, английский (США) "en-US", немецкий "de-DE", ...). Он пытается игнорировать нераспознанные данные и заполняет пропущенные значения для года, месяца и дня текущей датой (например, при разборе только строки, содержащей время).

Если вы знаете, что используемая культура строки отличается от текущей, вы можете указать используемую культуру:

CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
DateTime d = DateTime.Parse(dateString, culture);

Вы должны всегда окружать преобразование блоком try-catch, поскольку строка должна соответствовать распознанному шаблону. Кроме того, вы также можете проверить правильность строки с помощью метода DateTime.TryParse(dateString, out dateTime), который возвращает true в случае успеха, а результат в dateTime; или ложь в противном случае.

Если вы знаете точный формат, вы можете использовать

DateTime d = DateTime.ParseExact(dateString, "dd/MM/yyyy", null);

(См. Пользовательские строки формата даты и времени с сайта MSDN для других строк формата).

3 голосов
/ 24 октября 2008

Я бы также посоветовал взглянуть на DateTime.TryParse, если вы не уверены, в каком формате будет находиться строка даты. Таким образом, вы можете избежать обработки очень дорогих исключений в процедуре Parse. *

Я бы также рекомендовал Джону Скиту использовать DateTime.ParseExact, если вы делаете знаете точно в каком формате будет дата каждый раз.

0 голосов
/ 24 октября 2008
string str = "24/10/2008";
DateTime dt = Convert.ToDateTime(str);
0 голосов
/ 24 октября 2008

Попробуйте что-то вроде

DateTime date = System.DateTime.ParseExact(str, "dd/MM/yyyy", null);

На время это может сработать

DateTime date = System.DateTime.ParseExact(str, "HH:mm:ss", null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...