2010-09-03 3 views
21

Я хочу изменить DateTime для MySQL в C#.Преобразование 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? Может ли кто-нибудь рассказать мне о них?

ответ

53

Имейте в виду, что вы можете жестко закодировать формат 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) 

и так далее

+1

hh: mm - 12-часовой формат, вам понадобится HH: mm. Я только что обновил свой код этим разделом –

+0

Отличный ответ! Малая синтаксическая ошибка: DataTimeFormat должен быть DateTimeFormat. –

+0

@DerekW: Спасибо! Исправлена.Cool :) – abatishchev

13

Если строка формата для DateTime фиксирована можно преобразовать в System.DateTime с помощью:

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

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

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

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

+0

кстати, ваш код не работает из коробки, я не знаю w почему. Однако просто 'DateTime.Parse' работает правильно – abatishchev

5

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

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

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

+2

Имея опыт работы с MySQL, возможно, из-за настроек сортировки, он не всегда принимает 'System.DateTime', и лучший способ гарантировать правильную работу на любом сервере явно конвертирует дату в строку в формате' yyyy-MM-dd ..' – abatishchev

0

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

Дата

1.Extract из базы данных Oracle и передать его в переменной

string lDat_otp = ""; 

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

2.Conversion формат тузд

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

3.PASS formatForMySql переменная к процедуре или к чему-то еще

Смежные вопросы