2012-01-09 5 views
0

Мое приложение C# должно прочитать некоторую дату из базы данных MySQL. Проблема заключается в том, что формат даты зависит от настроек локализации системы.Как получить дату на C#, без локализации

Мой вопрос в том, возможно ли, что я всегда получаю дату в форматах yyyy-MM-dd hh: mm: ss и yyyy-MM-dd, независимо от настроек локализации.

Спасибо заранее!

+1

Каков тип данных столбца, представляющего дату в MySQL? – dasblinkenlight

+0

дата и дата-время (я использую их оба в нескольких разных полях) – user198003

+0

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

ответ

2

Если вы сохраняете даты как истинные даты или значения даты и времени, ваше приложение будет возвращать необработанные двоичные данные, и оно не будет подвергнуто локализации, пока вы не создадите строковое представление значений даты. Я предполагаю, что вы смотрите на значения в отладчике или используете Console.WriteLine(theValue);, который будет использовать текущую локаль. Всегда указывайте нужный формат и/или желаемую культуру при преобразовании нестроковых значений в строки.

Если вы храните даты в виде строк, вы всегда должны знать, какой формат был внесен в базу данных.

Предполагая, что даты хранятся в виде date или datetime: просто обрабатывать значения, как они есть, и не конвертировать их в строки, пока не нужно, чтобы показать их пользователю:

DateTime theValue = theReader.GetDateTime(fieldOrdinal); 
var theValueAsText = theValue.ToString(CultureInfo.InvariantCulture); 
var specificTextRepr = theValue.ToString("yyyy-MM-dd HH:mm:ss"); 

theValueAsText переменной будет строковым представлением, которое не привязано к определенной культуре. specificTextRepr будет вашим конкретным текстовым представлением.

3

Вы не должны читать его обратно в строку из базы данных - вы не показали, как вы читаете данные, но если вы используете что-то, чтобы заполнить DataTable или LINQ, или IDataReader.GetDateTime затем нет строкового форматирования (предполагая, что он правильно хранится в базе данных, как он выглядит).

DateTime значение не свойственно имеют формат, больше чем int в десятичной или шестнадцатеричной - это, как вы выбрать преобразовать его, что вопросы, и вы почти всегда должны избегать делать это форматирование, если только вам действительно нужно.

0

Вы можете отформатировать дату непосредственно в запросе с помощью

date_format(dob,'%d/%m/%Y')

select date_format(dob,'%d/%m/%Y') dob from student where Id=1 
2

Поскольку хранить даты в дату и дату/время конкретных представлений, форматирование не играет в него вообще (в отличие от некоторых сильно обескураженных схем хранения, когда дата/время хранится в виде строк, когда форматирование имеет значение, но по неправильной причине).

Когда вы запрашиваете MySQL со своего кода на C#, вы получите правильные даты независимо от того, какой у вас язык. Они будут показаны по-разному в зависимости от локали, но они будут представляют правильную дату независимо от настроек локали.

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