Конвертировать DateTime для MySQL, используя C # - PullRequest
24 голосов
/ 03 сентября 2010

Я хочу изменить DateTime для MySQL в C #.

Моя база данных MySQL принимает только этот формат 1976-04-09 22:10:00.

В C # есть строка со значением даты:

string str = "12-Apr-1976 22:10";

Я хочу конвертировать для MySQL, тогда это выглядит так:

1976-04-12 22:10

Как я могу изменить их или как другие программисты делают это, используя dd mm hh yy метод? Кто-нибудь может рассказать мне о них?

Ответы [ 4 ]

57 голосов
/ 03 сентября 2010

Имейте в виду, что вы можете жестко кодировать формат ISO

string formatForMySql = dateValue.ToString("yyyy-MM-dd HH:mm:ss");

или использовать следующее:

// just to shorten the code
var isoDateTimeFormat = CultureInfo.InvariantCulture.DateTimeFormat;

// "1976-04-12T22:10:00"
dateValue.ToString(isoDateTimeFormat.SortableDateTimePattern); 

// "1976-04-12 22:10:00Z"    
dateValue.ToString(isoDateTimeFormat.UniversalSortableDateTimePattern)

и т. Д.

16 голосов
/ 03 сентября 2010

Если ваш строковый формат для DateTime фиксирован, вы можете преобразовать в System.DateTime, используя:

string myDate = "12-Apr-1976 22:10";
DateTime dateValue = DateTime.Parse(myDate);

Теперь, когда вам нужно это в вашем конкретном формате, вы можете затем обратить процесс, т. Е.:

string formatForMySql = dateValue.ToString("yyyy-MM-dd HH:mm");

edit - обновленный код.По какой-то странной причине DateTime.ParseExact не играл хорошо.

6 голосов
/ 03 сентября 2010

Я настоятельно рекомендую вам использовать параметризованные запросы вместо того, чтобы отправлять значения в виде строк.

Таким образом, вам нужно только иметь возможность преобразовать ваш входной формат в DateTime или DateTimeOffset,и тогда вам не нужно беспокоиться о формате базы данных.Это не только проще, но позволяет избежать атак с использованием SQL-инъекций (например, для строковых значений) и является более надежным при изменении настроек базы данных.

Для первоначального преобразования в DateTime я предлагаю использовать DateTime.ParseExact или DateTime.TryParseExact для явного указания ожидаемого формата.

1 голос
/ 09 мая 2012

Это работает для меня:

1. Извлечь дату из базы данных Oracle и передать ее в переменную

 string lDat_otp = "";

  if (rw_mat["dat_otp"].ToString().Length <= 0)
  {
      lDat_otp = "";
  }
  else
  {
      lDat_otp = rw_mat["dat_otp"].ToString();
  }

2. Преобразование в формат MySQL

DateTime dateValue = DateTime.Parse(lDat_otp);
string formatForMySql = dateValue.ToString("yyyy-MM-dd HH:mm");

3. Передать переменную formatForMySql в процедуру или что-то еще

...