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

Откуда:
Сообщений: 412
Имеется: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1797.0 (X64) Jun 1 2011 15:43:18 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Требуется написать запрос (функцию/процедуру), который бы возвращал заданную дату с актуальным для нее смещением часового пояса. Прекрасная ф-ция sysdatetimeoffset() работает только для текущего момента, а мне необходимо получение сдвига за/через неделю. Конечная цель: экспорт данных, где даты должны быть представлены в таком виде: "2014-09-30 13:09:12 +02:00". Проблема упирается в переход на зимнее/летнее время, когда одна даата выглядит как "2014-09-30 13:09:12 +02:00", а другая как "2014-11-30 13:09:12 +01:00".

Вопрос: решается ли проблема использованием системных ф-ций, или надо писать свою процедуру с поиском всех переходных точек (зима-лето, лето-зима), и составлять календарную таблицу и проч.?

Время сервера: UTC +1:00 Amsterdam, Berlin etc.
30 сен 14, 15:18    [16639162]     Ответить | Цитировать Сообщить модератору
 Re: Определение часового здвига для заданной даты  [new]
senn
Member

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

о господи, "сдвига", разумеется....
30 сен 14, 15:19    [16639180]     Ответить | Цитировать Сообщить модератору
 Re: Определение часового здвига для заданной даты  [new]
Glory
Member

Откуда:
Сообщений: 104751
senn
или надо писать свою процедуру с поиском всех переходных точек (зима-лето, лето-зима), и составлять календарную таблицу и проч.?

Ага. Еще и с учетом возможных законодательных изменений о переходах на зимнее/летнее время
Оно вам надо ?
30 сен 14, 16:01    [16639510]     Ответить | Цитировать Сообщить модератору
 Re: Определение часового здвига для заданной даты  [new]
senn
Member

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

совершенно нет))
Блин, ну винда это ж определяет. Вот я и подумал, что было бы логиично в современной версии SQL Server некоторая коммуникация с системной информацией Windows.

В принципе, календарная таблица с количеством часов в сутках имеется, так что достаточно написать запрос, который будет с ней коррелировать. Просто я надеялся, что это можно решить с помощью системных ф-ций.
30 сен 14, 17:05    [16640048]     Ответить | Цитировать Сообщить модератору
 Re: Определение часового здвига для заданной даты  [new]
Glory
Member

Откуда:
Сообщений: 104751
senn
Блин, ну винда это ж определяет.

Что это ? Какая дата время будет через год в неизвестном часовом поясе/стране?
С учетом того, включены ли у вас переходы времени ?

Вы вот в курсе, например, что под каждое изменение переходов времени в России выходи патч для windows ?
А в том, что в каждой стране конкретный час перевода стрелок может отличаться ?

Сообщение было отредактировано: 30 сен 14, 17:11
30 сен 14, 17:09    [16640074]     Ответить | Цитировать Сообщить модератору
 Re: Определение часового здвига для заданной даты  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Серверу совершенно всё равно какую дату хранить и какой у неё пояс. Придется писать что-то дополнительное для этой математики.
30 сен 14, 17:51    [16640307]     Ответить | Цитировать Сообщить модератору
 Re: Определение часового здвига для заданной даты  [new]
senn
Member

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

>>Вы вот в курсе, например, что под каждое изменение переходов времени в России выходи патч для windows ?

не в курсе, ну как бы догадывался, это логично если винда локализирована. Но я - в европе, тут все несколько консервативнее)).

>>А в том, что в каждой стране конкретный час перевода стрелок может отличаться ?

ну это естественно, так для этого и существует локализация винды, которую мог бы теоретически считывать MSSQL.

Для меня было бы логичным наличие ф-ции вроде sysdatetimeoffset, с входящим параметром дата. Если есть ф-ция, которая возвращает текущее время + зона, почему эта ф-я не может быть универсальной и работать с любой датой, а не только актуальной?

Ну да ладно, не так нет, сами напишем.
30 сен 14, 18:21    [16640439]     Ответить | Цитировать Сообщить модератору
 Re: Определение часового здвига для заданной даты  [new]
senn
Member

Откуда:
Сообщений: 412
Владислав Колосов,

речь идет не о хранении, а о представлении. Вернее он нахождении сдвига по сравнению с UTC-датой.
Если я могу найти этот сдвииг для актуального момента (к примеру так: GETDATE() - GETUTCDATE()), то почему SQL не дает такой же возможности вычислить это для любой даты в этом часовом поясе?
30 сен 14, 18:25    [16640451]     Ответить | Цитировать Сообщить модератору
 Re: Определение часового здвига для заданной даты  [new]
Glory
Member

Откуда:
Сообщений: 104751
senn
ну это естественно, так для этого и существует локализация винды, которую мог бы теоретически считывать MSSQL.

Ну так он ее и считывает. Потому что сервер отображает время на вашей машине.

senn
Если есть ф-ция, которая возвращает текущее время + зона, почему эта ф-я не может быть универсальной и работать с любой датой, а не только актуальной?

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

senn
Если я могу найти этот сдвииг для актуального момента (к примеру так: GETDATE() - GETUTCDATE()), то почему SQL не дает такой же возможности вычислить это для любой даты в этом часовом поясе?

Потому что нельзя вычислить будущее. Оно еще не наступило.
30 сен 14, 20:53    [16641103]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить