2016-01-27 3 views
0

У меня есть значение DateTime и date as string. Дата строки может быть в неизвестном формате (1 из 2 в моем случае: "MMM dd yyyy" или "dd MMM"). Мне нужно проверить, являются ли даты eaqual.Compare DateTime и date as string

Есть ли какое-либо другое решение, кроме попытки разобрать строковое число с первым и вторым форматами, и если один возвращает DateTime, чем сравнивать с DateTime Type?

+0

«пытается разобрать дату строки с первыми и вторыми форматами, и если один возврат DateTime чем сравнить с типом DateTime» Вам не нужно Разбирает два раза, вам нужно только добавить два формата в это – Ian

ответ

5

Конечно. Вы можете использовать метод DateTime.ParseExact. Существует несколько перегрузок функции.

Одна из перегрузок - ParseExact(String, String[], IFormatProvider, DateTimeStyles).

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

string[] formats= {"MMM dd yyyy", "dd MMM"}; 

var dateValue = DateTime.ParseExact(dateString, 
        formats, 
        CultureInfo.InvariantCulture, 
        DateTimeStyles.None); 

Имейте в виду, что формат строкового представления должен соответствовать по крайней мере один из указанных форматов точно или исключение. Если вы не хотите явно использовать блок try/catch, тогда ваш лучший выбор будет TryParseExact. Это вернет true, если параметр был успешно преобразован; в противном случае, false.

DateTime dateValue; 

Nullable<DateTime> result = DateTime.TryParseExact(dateString, formats, 
      CultureInfo.InvariantCulture, 
      DateTimeStyles.None, 
      out dateValue)) ? 
    dateValue : 
    (DateTime?)null; 
+0

ли вам означает использовать два * разных формата? – Jamiec

+0

@Jamiec Я не понял вопроса. Я изменил форматы, чтобы они соответствовали тем в вопросе. Но в предыдущем они были разными. –

+1

Вы сделали довольно хорошую работу, отвечая на него тогда;). Кстати, вы, вероятно, хотите передать 'InvariantCulture', а не' en-US' – Jamiec