Ответ 1
Нет, но нетрудно преобразовать дату в С#.
if ( DateTime.Parse(date2) <= DateTime.Parse(date1))
{
// perform some code here
}
У меня есть два поля:
string date1 = "04/26/10";
string date2 = "04/25/10";
Как я могу сравнить эти два поля следующим образом:
if (date2 <= date1)
{
// perform some code here
}
Можно ли это сделать без предварительной конвертации полей в отдельную переменную типа даты?
EDIT: Я должен упомянуть, что эти значения поступают из таблицы базы данных, где значения даты начинаются с строкового формата. Старый код устаревшего...
Нет, но нетрудно преобразовать дату в С#.
if ( DateTime.Parse(date2) <= DateTime.Parse(date1))
{
// perform some code here
}
Если ваши даты фактически хранятся в виде строк в в базе данных, похоже, вы не можете быть уверены, что они будут в допустимом формате перед разбором. По этой причине я бы предложил небольшую вариацию ответа 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!
}
По крайней мере вам нужно выделить строки, чтобы сравнить их в правильном порядке.
Если вы хотите оставить их в виде строк, вам необходимо изменить порядок их с помощью LARGEST- > SMALLEST, поэтому это:
yyyy/mm/dd
можно сравнивать напрямую, но не в формате, который у вас есть. С вашим форматом вам нужно разбить его и либо перекомпилировать, как описано выше, либо сравнить отдельные фрагменты в нужном порядке.
Сказав это, довольно легко преобразовать строки в DateTime, используя DateTime.ParseExact.
Как правило, это плохая идея сравнить дату как строки.
Но если ваши строки находятся в том же формате (например, yyyy/mm/dd
означает годы, затем monthes then days), тогда сравнение может быть действительным.
Это можно было бы сделать с помощью манипуляции с строкой, но это сводилось бы к эффективному сравнению трех наборов целых чисел, которые в качестве строк могли бы вызвать дополнительные накладные расходы, чем преобразование в datetimes. Почему вы хотите это сделать?
Нет. Позвольте структуре .net создать это для вас. Он будет правильно определять настройки и формат даты пользователя (используя системные настройки, текущий поток) и определять, какой из них - месяц, год и день, особенно если эти данные поступают, например, из SQL-сервера.
Предпочтительно, чтобы перед форматированием была отформатирована дата. В зависимости от вашей культуры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
}