2013-05-29 4 views
3

мне нужно использоватьC# string to SqlDateTime: как установить формат для распознавания?

SqlDateTime.Parse(val) 

Допустимы строки, такие как "23.3.1992 00:00:00".

Строка в европейском формате, то есть день предшествует месяцу. Однако Парсон хочет «американского» формата. Как я могу сказать, что он использует конкретный формат datetime/locale?

Заранее благодарен!

+1

У вас нет 'DateTime' экземпляр передать в базу данных? Зачем вообще использовать строки? – Oded

+0

Почему бы не использовать что-то абсолютно невмешательство, как 'YYYY-MM-dd HH: mm: ss' so' 2013-05-29 13: 38: 00', тогда все будет знать, что это значит. – Belogix

+0

SqlDateTime использует InvariantCulture. Когда вам нужно что-то другое, используйте DateTime и его перегрузочные перегрузки, где вы можете предоставить другую культуру или формат. И затем используйте конструктор SqlDateTime, который принимает DateTime. И, как и другие, если возможно, лучше попытайтесь использовать формат независимой от культуры строки, если это необходимо. – Ralf

ответ

5

Попробуйте это:

string val = "23.12.1992 00:00:00"; 

// Parse exactly from your input string to the native date format. 
DateTime dt = DateTime.ParseExact(val, "dd.M.yyyy hh:mm:ss", null); 

// Part to SqlDateTime then    
System.Data.SqlTypes.SqlDateTime dtSql = System.Data.SqlTypes.SqlDateTime.Parse(dt.ToString("yyyy/MM/dd")); 

Это может быть сделано в одном операторе , но просто разделены для иллюстрации.

0

Вы можете попробовать это?

string valInEuropean = "23.3.1992 00:00:00"; 
DateTime dateInEuropean = DateTime.Parse(valInEuropean); 
string valInAmerican = dateInEuropean.ToString("yyyy-MM-dd HH:mm:ww"); 
+1

Это будет работать, только если его культура уже настроена на европейский, иначе вызов DateTime.Parse завершится неудачно. – Chris

+0

euhh да, но это так или нет? –

0

Для преобразования строки в объект даты и времени, когда формат известен (в данном случае) использование

DateTime dwweek = DateTime.ParseExact("23.3.1992 00:00:00", "dd.MM.yyyy hh:mm:ss", System.Globalization.CultureInfo.InvariantCulture); 
2

Вы пробовали DateTime вместо SqlDateTime

DateTime d = DateTime.Parse(val); 
String s = d.ToString(CultureInfo.CreateSpecificCulture("en-US"));