Строка в ммм-гг формат времени в C # - PullRequest
0 голосов
/ 07 апреля 2009

Мне нужно выполнить некоторые операции с датами в ASP.net с использованием C #.

  1. Дата, которую я хотел бы ввести, должна иметь формат 'Jul-05' (ммм-гг Формат и тип- строка ) ... как я могу проверить с этим ???? Или как я могу проверить это с тем, что пользователь вводит в виде строки ???

  2. После проверки этого мне нужно сравнить tht со значением в базе данных (скажем, имя столбца buy_period , которое имеет значение (скажем) 31.04.2007).

Как я могу написать запрос для сравнения обоих ?? (поскольку обе даты будут иметь разные форматы)

Можете ли вы помочь мне в этом ???

Ответы [ 6 ]

5 голосов
/ 07 апреля 2009
  DateTime myDateTime = DateTime.ParseExact( input, "MMM-yy" );

Затем вы можете с радостью передать его в хранимую процедуру (и т. Д.) В качестве параметра для сравнения на сервере (или просто использовать DateTime, возвращенный в результате существующего запроса)

2 голосов
/ 07 апреля 2009

Используйте метод TryParseExact, чтобы проверить строку и проанализировать ее до значения DateTime:

DateTime month;
if (DateTime.TryParseExact("MMM-yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out month)) {
   // parsing was successful
}

Значение DateTime будет использовать первый день месяца и время 0:00 для заполнения полного значения, поэтому строка типа "jul-05" будет преобразована в полное значение DateTime, например 2005-07-01 00:00:00.0000 так что это будет отправной точкой этого месяца.

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

DateTime nextMonth = month.AddMonths(1);

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

where date >= @Month and date < @NextMonth
2 голосов
/ 07 апреля 2009

.NET Framework имеет несколько приятных методов в структуре DateTime :: Parse, TryParse, ParseExact, TryParseExact.

Эта информация обсуждается на MSDN .

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

Итак ... давайте попробуем это ...

using System.Globalization;

CultureInfo MyCultureInfo = new CultureInfo("en-US");
string myString = "Jul-05";
DateTime myDateTime = DateTime.ParseExact(myString, "MMM-yy", MyCultureInfo))
Console.WriteLine();

значение myDateTime затем может быть передано в базу данных как свойство DateTime и проверено на соответствие этому.

РЕДАКТИРОВАТЬ: Черт, избили Роуленд на минуту, как я его печатал!

РЕДАКТИРОВАТЬ 2: Пожалуйста, обратите внимание на "МММ-гг". Как указано на странице MSDN , MMM означает «Представляет сокращенное название месяца, как определено в текущем свойстве System.Globalization.DateTimeFormatInfo.AbbreviatedMonthNames». mmm (нижний регистр) недействителен.

0 голосов
/ 07 апреля 2009

Вы можете использовать

DateTime date = DateTime.ParseExact(value, "MMM-yy", null); //checked at http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

и затем использовать эту дату в параметре команды sql.

0 голосов
/ 07 апреля 2009

ну ваша проверка и сравнение должны быть двумя разными операциями. так что вы могли бы сделать много вещей для проверки.

Параметры проверки:

1.) Разбейте строку на «-» и проверьте, есть ли часть ммм в вашем списке месяцев, а затем проверьте, является ли число действительным.

2.) Регулярное выражение, оно расширенное, но может быть уменьшено до одной строки. Посмотрите RegEx, если вы заинтересованы.

После проверки строки преобразуйте ее в объект DateTime и сравните его с другим значением, используя DateTime.Compare ().

Надеюсь, это поможет.

0 голосов
/ 07 апреля 2009

1: читать это

2: это столбец datetime или varchar?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...