Как получить дату в C #, без локализации - PullRequest
0 голосов
/ 09 января 2012

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

Мой вопрос: возможно ли, чтобы я всегда получал дату в форматах гггг-мм-дд чч: мм: сс и гггг-мм-дд, независимо от настроек локализации.

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

Ответы [ 4 ]

3 голосов
/ 09 января 2012

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

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

2 голосов
/ 09 января 2012

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

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

2 голосов
/ 09 января 2012

Если вы сохраняете даты как истинные значения даты или даты и времени, ваше приложение вернет необработанные двоичные данные и не будет подвергаться локализации до тех пор, пока вы не создадите строковое представление значений даты.Я предполагаю, что вы смотрите на значения в отладчике или используете 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 будет вашим конкретным текстовым представлением.

0 голосов
/ 09 января 2012

Вы можете отформатировать дату непосредственно в запросе, используя

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

select date_format(dob,'%d/%m/%Y') dob from student where Id=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...