Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Часовой пояс MS SQL 2008  [new]
dellmaster
Member

Откуда:
Сообщений: 11
Все привет!
Есть такой вопрос:
Как изменить часовой пояс MS SQL 2008, либо каким то другим способом учитывать часовой пояс?
Т.е. мне годо чтобы при добавлении новых записей в таблица БД в поля datatime (по умолчанию для который прописано getdate()) дата проставлялась с учетом часового пояса.

нашел как вариант "SELECT SWITCHOFFSET(SYSDATETIMEOFFSET(),'+03:00');", но в таком случае как я понял надо самому отслеживать переход на летнее время.

Может у когото есть какието предложения или подобный опыт.

Всем спасибо за внимание!
8 фев 10, 01:09    [8308832]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
aleks2
Guest
dellmaster
в поля datatime (по умолчанию для который прописано getdate()) дата проставлялась с учетом часового пояса.


КАКОГО часового пояса? Клиента или сервера?

Могет быть не изобретать велосипед
GETUTCDATE
Returns the datetime value representing the current UTC time (Universal Time Coordinate or Greenwich Mean Time). The current UTC time is derived from the current local time and the time zone setting in the operating system of the computer on which SQL Server is running.
8 фев 10, 08:01    [8308961]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33970
Блог
Тут возможно имеется ввиду распределенная система, сервер в Москве, клиенты по регионам, или как-то так. Автор, уточните.
8 фев 10, 08:19    [8308976]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Чо тут уточнять? Хранить, как aleks2 сказал, GETUTCDATE, а клиенту показывать относительно его часового пояса хоть с учетом, хоть без учета перехода на летнее время.
8 фев 10, 08:25    [8308982]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
dellmaster
Member

Откуда:
Сообщений: 11
Доброе время суток!
Уточняю:
ситуация такова - хостинг забугорный, соответственно время на сервере тоже забугорное и при добавлении новой строки в таблицу базы (в котрой в поле типа datatime хранится время добавления строки, т.е. по умолчанию вставляется getdate()), а сайт предназначен для российского пользователя и соответственно пользователям надо показывать даты добавления в Московскоем времени.

А GETUTCDATE возвращает время по гринвичу, как я понял, и соотвественно не учитывает часовой пояс. Тогда уж лучше приминить SWITCHOFFSET(SYSDATETIMEOFFSET(),'+03:00');
8 фев 10, 08:52    [8309034]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
отображение информации - задача клиента, в том числе и корректировка часовых поясов исходя из локального времени юзера (ИМХО)
8 фев 10, 08:54    [8309039]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
dellmaster
Member

Откуда:
Сообщений: 11
Knyazev Alexey,
Под Вашим постом стоит время добавления 08:54, а в моей ситуации показывалось бы 5:54 - и как в таком случае клиент будет корректировать это время?
8 фев 10, 09:01    [8309063]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Алексей прав на 1000‰.
Тем более, Вы говорите про летнее время. А ведь оно даже для России определяется по-разному (это скорее зависит от местного законодательства).
А когда вдруг возьмутся, и перемешают часовые пояса, как Медведев требует, что делать будете?
8 фев 10, 09:26    [8309141]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
dellmaster
Member

Откуда:
Сообщений: 11
Мне время на сайте надо привязать к московскому времени не зависимо от того в каком часовом поясе находится пользователь. Про часосой пояс я говорю в том смысле что хостинг на котором лежит сайт и база находятся в часовом поясе отличном от Москвы (зона +1), а мне надо время московское в базу вставлять и при этом очень желательно чтобы автоматически учитывался переход на летнее время, потомучто на сколько я знаю - они там переводами часов не балуются.
8 фев 10, 09:53    [8309261]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
dellmaster
Мне время на сайте надо привязать к московскому времени не зависимо от того в каком часовом поясе находится пользователь. Про часосой пояс я говорю в том смысле что хостинг на котором лежит сайт и база находятся в часовом поясе отличном от Москвы (зона +1), а мне надо время московское в базу вставлять и при этом очень желательно чтобы автоматически учитывался переход на летнее время, потомучто на сколько я знаю - они там переводами часов не балуются.
Для Москвы-2010 можно, например, так:
SELECT
 CASE
  WHEN GETUTCDATE()<DATEADD(DAY,-DATEDIFF(DAY,0, STR(YEAR(GETUTCDATE()))+'0401')%7-2, STR(YEAR(GETUTCDATE()))+'0401 23:00')
  THEN DATEADD(HOUR,3, GETUTCDATE())
  WHEN GETUTCDATE()<DATEADD(DAY,-DATEDIFF(DAY,0, STR(YEAR(GETUTCDATE()))+'1101')%7-2, STR(YEAR(GETUTCDATE()))+'1101 23:00')
  THEN DATEADD(HOUR,4, GETUTCDATE())
  ELSE DATEADD(HOUR,3, GETUTCDATE())
 END;
8 фев 10, 10:15    [8309380]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
aleks2
Guest
dellmaster
Мне время на сайте надо привязать к московскому времени не зависимо от того в каком часовом поясе находится пользователь. Про часосой пояс я говорю в том смысле что хостинг на котором лежит сайт и база находятся в часовом поясе отличном от Москвы (зона +1), а мне надо время московское в базу вставлять и при этом очень желательно чтобы автоматически учитывался переход на летнее время, потомучто на сколько я знаю - они там переводами часов не балуются.


Вот для этого и придумали:
GETUTCDATE()

А уж клиент пускай разбирается как его время отличается от Гринвича.
8 фев 10, 10:53    [8309606]     Ответить | Цитировать Сообщить модератору
 Re: Часовой пояс MS SQL 2008  [new]
dellmaster
Member

Откуда:
Сообщений: 11
iap,

Огромное спасибо за ответ, да еще и с примером.
8 фев 10, 11:55    [8310118]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Часовой пояс MS SQL 2008  [new]
Начинающий в Delphi
Member

Откуда:
Сообщений: 6
iap,

сейчас запустил этот запрос, получил на 1 час больше.
SELECT
 CASE
  WHEN GETUTCDATE()<DATEADD(DAY,-DATEDIFF(DAY,0, STR(YEAR(GETUTCDATE()))+'0401')%7-2, STR(YEAR(GETUTCDATE()))+'0401 23:00')
  THEN DATEADD(HOUR,3, GETUTCDATE())
  WHEN GETUTCDATE()<DATEADD(DAY,-DATEDIFF(DAY,0, STR(YEAR(GETUTCDATE()))+'1101')%7-2, STR(YEAR(GETUTCDATE()))+'1101 23:00')
  THEN DATEADD(HOUR,4, GETUTCDATE())
  ELSE DATEADD(HOUR,3, GETUTCDATE())
 END;

Возможно, так правильнее...
declare @Data datetime
select @Data = getutcdate()

select case when
@Data > dateadd(dd,-datediff(dd,0, str(year(@Data))+'0401')%7-2, str(year(@Data))+'0401 23:00') and
@Data < dateadd(dd,-datediff(dd,0, str(year(@Data))+'1101')%7-2, str(year(@Data))+'1101 23:00') then dateadd(hh,3, @Data)
else dateadd(hh,4, @Data) end
Если вместо @Data подставить 20 января 2015, то будет 4 часа смещения.
11 июн 15, 21:51    [17762575]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить