2010-01-07 2 views
4

У меня есть некоторый код в приложение вдоль линийC# Разбор даты и времени

DateTime activityDate = DateTime.Parse(tempDate + " " + tempTime); 

Где tempDate представляет собой строку со значениями, такими как «2009-12-01» (т.е. гггг-мм-дд) и tempTime является строка со значениями, такими как «23:12:10» (т.е. чч: мм: сс)

Во-первых, есть лучший способ объединить их, чтобы получить DateTime, а во-вторых это безопасный код для работы в любом регионе (если нет способа справиться с этим)

Хм, смотря на дату более тесной конкатенированной даты & Время на самом деле в этом формате «2009-11-26T19: 37: 56 + 00: 00» - какая строка формата для часовой поясная часть даты/времени?

+0

(ответил (а) комментариев/комментариев) –

ответ

10

Если формат гарантируется ParseExact может быть более безопасным (sepcifying рисунок):

DateTime activityDate = DateTime.ParseExact(tempDate + " " + tempTime, 
    "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); 
+0

Если бы у меня была информация о часовом поясе в строке, что бы шаблон был (то есть 2009-11-26T19: 37: 56 + 00: 00) –

+0

Для этого шаблона я использовал бы ' XmlConvert.ToDateTime (s) ', который обрабатывает этот формат напрямую. –

6

Чтобы указать формат даты и времени, вы можете использовать ParseExact.

например:

DateTime dateTime = 
     DateTime.ParseExact("2009-12-01 23:12:10", "yyyy-MM-dd HH:mm:ss", null); 

Что дает:

Assert.That(dateTime, Is.EqualTo(new DateTime(2009, 12, 1, 23, 12, 10))); 

Вы также можете указать культуру, которая использует этот формат и синтаксический анализ, используя его дату и время, сохраняя при этом разборе безопасности от операционной системы обработки культура.
С быстрым взглядом кажется, что нет культуры с этим точным предопределенным форматом, но в целом в стандартных культурах существует множество стандартных форматов.

2

Использование ParseExact. Это было задано несколько раз на SO .. Link1, Link2

0

Вы можете использовать ParseExact для указания формата для синтаксического анализа. Таким образом, нет никакого риска для того, чтобы быть проанализирован любым другим способом:

DateTime activityDate = DateTime.ParseExact(tempDate + " " + tempTime, "yyyy'-'MM'-'dd HH':'mm':'ss", CultureInfo.InvariantCulture); 
0

Как будто ты заботишься, другой вариант был бы сделать:

DateTime activityDateOnly = 
    DateTime.ParseExact(tempDate, "yyyy-MM-dd", CultureInfo.InvariantCulture); 

TimeSpan activityTime = 
    TimeSpan.ParseExact(tempTime, "hh':'mm':'ss", CultureInfo.InvariantCulture); 

DateTime activityDate = activityDateOnly + activityTime; 

Просто вариант ...

Смежные вопросы