данные за сутки в разное местное время - PullRequest
0 голосов
/ 23 сентября 2010

У меня есть клиент winform и служба wcf, которые вместе отображают исторические данные. данные хранятся в БД с метками времени utc. Если два клиента в разных часовых поясах хотят просматривать данные за последний день на основе их местного времени, возможно ли, что они будут просматривать разные наборы данных?

Ответы [ 3 ]

2 голосов
/ 23 сентября 2010

Это зависит.

  1. Если « дневная стоимость » означает « за последние 24 часа », то они оба увидят одни и те же данные.
  2. Если " дневная стоимость " означает " 00: 00-23: 59 of (текущая дата - 1) в местном часовом поясе пользователя ", то онимогут видеть другие данные.

Пример:

      event 1      event 2       +---- service request
         |            |          v

|---------------|---------------|-  days in Central Europe

--------|-----------------|-------  days in the US (Pacific time)

---------------|---------------|--  UTC day boundaries

В случае 1 вы просто возвращаетесь на 24 часа с момента запроса на обслуживание.Легко видеть, что оба клиента, один в США и один в Европе, получат одинаковый список событий.

В случае 2 это сложнее: в отношении времени США, событий 1 и2 происходят в один и тот же день.Что касается Европы, то оба события происходят в разные дни, поэтому результаты будут разными для клиента в США и для клиента в Европе.

1 голос
/ 23 сентября 2010

Без дальнейших подробностей ответ - оба.

  1. Если день определен в местном часовом поясе, то перед выполнением запроса к БД он будет изменен на формат UTC, и они будут иметь разные наборы данных.

  2. если запрос похож на

    select * from dbTable where TimeStamp >= '9/22/2010' and TimeStamp < '9/23/2010' 
    

    или

    select * from dbTable where TimeStamp >= GetDate() - '24:00:00' and TimeStamp < GetDate() 
    

    тогда они вернут один и тот же набор данных для обоих часовых поясов.

0 голосов
/ 23 сентября 2010

Это, безусловно, возможно - это одна из распространенных проблем глобализации / локализации.Важная вещь, которую нужно сделать, - это преобразовать все запросы в UTC время перед выполнением запроса.Если все запросы основаны на UTC, то данные, возвращаемые на локальные машины, должны совпадать, поскольку время UTC будет совпадать.

...