Как преобразовать установленную дату в UTC? - PullRequest
0 голосов
/ 13 января 2012

Мне действительно нужна помощь специалиста по SQL.Я делаю хранимую процедуру, и все хорошо и модно, пока я не отобразить ее.Все, что хранится в базе данных, хранится в UTC, однако мы получаем смещение по GMT для браузеров, и именно так мы определяем предопределенный диапазон времени.Проблема в том, что я использую дату для отображения, однако из-за смещения по Гринвичу отображаемая дата не является правильной, и это смущает людей.Я отображаю ее как короткую дату, и вот часть, где она преобразуется:

    SELECT
        BundleEvent.BundleId,
        CAST(BundleEvent.EventDate AS DATE)
    FROM dbo.BundleEvent WITH (NOLOCK)
    JOIN dbo.BundleUser WITH (NOLOCK)
        ON BundleEvent.BundleId = BundleUser.BundleId
    WHERE BundleEvent.EventDate >= @StartTimeGmt AND BundleEvent.EventDate <= @EndTimeGmt
        AND BundleUser.UserId = CASE WHEN @UserId IS NULL THEN BundleUser.UserId ELSE @UserId END
    GROUP BY
        BundleEvent.BundleId,
        CAST(BundleEvent.EventDate AS DATE)

Поскольку я группирую ее как короткую дату, я теряю способность ее преобразовать.Поэтому, когда люди выбирают диапазон Сегодня, они могут получить дату от сегодняшнего и вчерашнего дня из-за своего смещения по Гринвичу.Кто-нибудь имел эту проблему раньше, и если да, то какое решение вы использовали?Поскольку я работаю с хранимой процедурой, я очень ограничен.Я не знаю, как это исправить.

1 Ответ

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

Не думаю, что вы должны попытаться решить эту проблему в базе данных.Хранение дат utc является правильным.Вам следует позаботиться о смещении времени пользователя во внешнем интерфейсе (оно может быть разным для каждого пользователя, верно?).

Приложение внешнего интерфейса должно также указывать даты utc для запроса «сегодня».

...