преобразование даты из SQL Server в C #, а затем в javascript дает разные результаты на веб-сервере США против Лондона

У меня есть асп. Приложение календаря 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 день до веб-сервера США)

есть предложения?

1
задан leora 27 August 2010 в 16:56
поделиться

3 ответа

Если вы сохраняете местное время в базе данных вместо UTC, вы можете получить другие даты при преобразовании обратно в местное время. Убедитесь, что ваши даты преобразованы в UTC , прежде чем вы зафиксируете их в базе данных. Если вы хотите, чтобы все всегда видели одну и ту же дату, независимо от того, где они находятся, всегда возвращайте дату в формате UTC — не конвертируйте обратно в местное время.

2
ответ дан 2 September 2019 в 21:45
поделиться

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

SELECT
    CONVERT(varchar(10),YourDatetimeColumn,111) AS StringDate1  --YYYY/MM/DD
   ,CONVERT(varchar(10),YourDatetimeColumn,121) AS StringDate2  --YYYY-MM-DD
    FROM ...

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

0
ответ дан 2 September 2019 в 21:45
поделиться

Это определенно проблема локализации. Вам нужно хранить дату и время в одном и том же часовом поясе и учитывать другое форматирование даты. Например, 1 сентября 2010 года в США имеет формат «01.09.2010», а в Великобритании — «09.01.2010». Если вы смотрите на это как на дату в США, вы будете смотреть на 9 января 2010 года.

0
ответ дан 2 September 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: