У меня есть приложение календаря asp.net mvc (с использованием jquery ui datepicker), и я сталкиваюсь со странной ситуацией, когда при тестировании на веб-сервере в США я вижу определенную дату, а когда я тестирую на лондонском веб-сервере, я вижу другую дату (дата до)
Вот подробности:
Я храню дату на сервере SQL как:
2010-09-16 00:00:00.000
Затем я загружаю это в объект C # DateTime.
Мне нужно передать это как часть объекта json моему клиентскому javascript, поэтому мне предложили следующее решение:
jsonobject.Date = UnixTicks(a.Date),
Где UnixTicks :
private static double UnixTicks(DateTime dt)
{
DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return ts.TotalMilliseconds;
}
Затем я преобразую его в дату JavaScript, используя этот код ниже на стороне клиента:
var d = new Date(jsonobject.Date);
Кто-нибудь знает, почему, если бы у нас был сервер в США или в Лондоне, я бы получил другую дату. Сначала я подумал, что это
DateTime d2 = dt.ToUniversalTime();
Но я изменил это на:
DateTime d2 = dt;
И до сих пор видел ту же проблему. (на лондонском веб-сервере дата будет отображаться за 1 день до веб-сервера в США)
Какие-либо предложения?
3 ответа
Если вы храните местное время в базе данных вместо UTC, вы можете получить разные даты при обратном преобразовании в местное время. Убедитесь, что ваши даты конвертированы в UTC , прежде чем зафиксировать их в базе данных. Если вы хотите, чтобы все всегда видели одну и ту же дату независимо от того, где они находятся, всегда возвращайте дату UTC - не переводите обратно в местное время.
Если вы просто хотите полностью игнорировать проблему с часовым поясом и локализацией, просто представьте даты в виде строк для вашего приложения:
SELECT
CONVERT(varchar(10),YourDatetimeColumn,111) AS StringDate1 --YYYY/MM/DD
,CONVERT(varchar(10),YourDatetimeColumn,121) AS StringDate2 --YYYY-MM-DD
FROM ...
А затем просто используйте их в приложении, как обычные строковые данные, и они не будут меняться или корректироваться для вас.
Это определенно проблема локализации. Вам нужно хранить свой DateTime в одном часовом поясе и учетной записи для другого форматирования даты. Например, 1 сентября 2010 года в США форматируется «01.09.2010», а в Великобритании - «1/9/2010». Если вы смотрите на это как на свидание в США, вы увидите 9 января 2010 года.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.