Convert.ToString (DateTime.UtcNow) неожиданное поведение? - PullRequest
0 голосов
/ 01 марта 2012

У меня есть сайт asp.net (Framework 4.0), он работает нормально, записывает время входа / выхода пользователя в базе данных SQM 2000. Я использовал этот метод Convert.ToString(DateTime.UtcNow), чтобы получить системное время.

Некоторое время он сохранял формат "гггг-ММ-дд", хорошо, но иногда "гггг-дд-ММ", так как отладить его, размещенный сайт в общедоступной среде, поэтому я думаю, что формат времени будет согласован везде .

одинакового использования имеют оба формата. Поэтому я не могу воспроизвести это.

т.е. сохранена сегодняшняя дата в "2012-03-01" && "2012-01-03",

Пожалуйста, дайте мне знать, что с ним?

Спасибо, Laxmilal Menaria

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Прежде всего - сохранять дату в виде строки не очень хорошая идея. Попробуйте использовать тип даты в вашей БД.
Похоже, что пользователи запускают Convert.ToString(DateTime.UtcNow) из разных культур. Вы можете использовать подход, предоставленный Guffa, но если вы попытаетесь использовать второй вариант, вы должны помнить, что для некоторых культур он может быть отформатирован как «2012/03/01», потому что фреймворк пересчитывает «-» как символ формата, который следует преобразовать в указанный разделитель для пользовательской культуры.
Поэтому я снова рекомендую вам хранить дату как объект даты в вашей БД.

0 голосов
/ 01 марта 2012

Кажется, что стандартная культура сервера может измениться. Вы должны использовать конкретный объект культуры для любых зависимых от культуры преобразований вместо использования по умолчанию. Например:

CultureInfo culture = new CultureInfo("EN-gb");
string date = Convert.ToString(DateTime.UtcNow, culture);

(Конечно, вы можете хранить объект CultureInfo настолько долго, насколько это возможно, и не создавать его для каждого использования.)

В качестве альтернативы укажите пользовательский формат:

string date = DateTime.UtcNow.ToString("yyyy'-'MM'-'dd");

Edit:

Я пытался найти базу данных "SQM 2000", чтобы увидеть, что это такое, но ничего не нашел. Если вы имеете в виду базу данных Microsoft SQL Server 2000, то она может хранить даты как тип данных datetime, поэтому вам не следует преобразовывать дату в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...