Подтвердить что ты не робот

Есть ли способ сравнить даты "строки" на С# без преобразования строк?

У меня есть два поля:

string date1 = "04/26/10";
string date2 = "04/25/10";

Как я могу сравнить эти два поля следующим образом:

if (date2 <= date1)
{
  // perform some code here
}

Можно ли это сделать без предварительной конвертации полей в отдельную переменную типа даты?

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

4b9b3361

Ответ 1

Нет, но нетрудно преобразовать дату в С#.

if ( DateTime.Parse(date2) <=  DateTime.Parse(date1))

{
  // perform some code here
}

Ответ 2

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

DateTime d1, d2;
if (DateTime.TryParse(date1, out d1) &&
    DateTime.TryParse(date2, out d2) &&
    d2 <= d1)
{
    // perform some code here
}
else
{
    // strings didn't parse, but hey,
    //at least you didn't throw an exception!
}

Ответ 3

По крайней мере вам нужно выделить строки, чтобы сравнить их в правильном порядке.

Если вы хотите оставить их в виде строк, вам необходимо изменить порядок их с помощью LARGEST- > SMALLEST, поэтому это:

yyyy/mm/dd

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

Сказав это, довольно легко преобразовать строки в DateTime, используя DateTime.ParseExact.

Ответ 4

Как правило, это плохая идея сравнить дату как строки.

Но если ваши строки находятся в том же формате (например, yyyy/mm/dd означает годы, затем monthes then days), тогда сравнение может быть действительным.

Ответ 5

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

Ответ 6

Нет. Позвольте структуре .net создать это для вас. Он будет правильно определять настройки и формат даты пользователя (используя системные настройки, текущий поток) и определять, какой из них - месяц, год и день, особенно если эти данные поступают, например, из SQL-сервера.

Ответ 7

Предпочтительно, чтобы перед форматированием была отформатирована дата. В зависимости от вашей культурыinfo самым безопасным способом сравнения дат является форматирование строки даты до "yyyy-mm-dd".

DateTime d1, d2;
string date1 = "04/26/10";
string date2 = "04/25/10";
d1 = DateTime.Parse(date1.ToString("yyyy-MM-dd"));
d2 = DateTime.Parse(date2.ToString("yyyy-MM-dd"));
if (d1 > d2)
{
      //do something
}