powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Прибавить/убавить timezone к timestamp
10 сообщений из 10, страница 1 из 1
Прибавить/убавить timezone к timestamp
    #39059176
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шалом.

Таки туплю.

Есть входящий параметр, очень легко делим его на составные части

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 AXMLDate = '2015-09-19T23:59:59+04:00';

 ADATE = substring( AXMLDate from 1 for 10);
 ATIME = substring( AXMLDate from 12 for 8);

 ATIMESTAMP = ADATE + ATIME;

 ATimezoneSign = coalesce(substring( AXMLDate from 20 for 6), '+03:00');
 ATimezone = substring( ATimezoneSign from 2 for 5);
 ATimezonesign = substring( ATimezoneSign from 1 for 1);



а вот здесь настигает печаль:

Код: sql
1.
2.
3.
 if (ATimezoneSign = '-')
    then ATIMESTAMP = ATIMESTAMP + ATimezone;
    else ATIMESTAMP = ATIMESTAMP - ATimezone;



Пока через левую дату преобразовываю в double, но после перенесенного насморка мозг от такого решения подташнивает.

Код: sql
1.
 ATimezone = cast('01.01.2015' as DATE) + cast(substring( ATimezoneSign from 2 for 5) as TIME) - cast('01.01.2015' as TIMESTAMP);


Господа, нет ли поизящнее?
...
Рейтинг: 0 / 0
Прибавить/убавить timezone к timestamp
    #39059201
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATIMESTAMP = ADATE + ATIME + ATimezone * 3600

зы: без учёта знака
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прибавить/убавить timezone к timestamp
    #39059208
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, скобки забыл
> ATIMESTAMP = ADATE + (ATIME + ATimezone * 3600)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прибавить/убавить timezone к timestamp
    #39059220
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

С отрицательными зонами не прокатит.
...
Рейтинг: 0 / 0
Прибавить/убавить timezone к timestamp
    #39059227
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы таймзону хранил отдельно.
...
Рейтинг: 0 / 0
Прибавить/убавить timezone к timestamp
    #39059231
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Pastor!
You wrote on 23 сентября 2015 г. 11:27:18:

Pastor> С отрицательными зонами не прокатит.почему?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прибавить/убавить timezone к timestamp
    #39059253
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

А чем dateadd не угодил?
Перевести ATimezone в минуты
dateadd(hour, -180, current_timestamp)
...
Рейтинг: 0 / 0
Прибавить/убавить timezone к timestamp
    #39059284
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Шавлюк Евгений!
You wrote on 23 сентября 2015 г. 12:05:15:

Шавлюк Евгений> Перевести ATimezone в минуты
> dateadd(hour, -180, current_timestamp)вот оно!
+1
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прибавить/убавить timezone к timestamp
    #39059289
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгенийpastor,

А чем dateadd не угодил?
Перевести ATimezone в минуты
dateadd(hour, -180, current_timestamp)

пример перевода таймзоны в часы написал в первом посте.

Ваш пример нуждается в переводе таймзоны в минуты.
...
Рейтинг: 0 / 0
Прибавить/убавить timezone к timestamp
    #39059870
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorВаш пример нуждается в переводе таймзоны в минуты.
Зато никаких проблем с отрицательными зонами

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create or alter procedure XMLDATE2TIMESTAMP (
    AXMLDATE varchar(25) = '2015-09-19T23:59:59+04:00')
returns (
    ATIMESTAMP timestamp,
    ADATE date,
    ATIME time,
    ATIMEZONEMINUTES integer)
AS
declare variable ATimezoneSign varchar(6);
begin
  ADATE = substring(AXMLDate from 1 for 10);
  ATIME = substring(AXMLDate from 12 for 8);
  ATimezoneSign = coalesce(substring( AXMLDate from 20 for 6), '+03:00');
  ATimezoneMinutes = iif(left(ATimezoneSign, 1) = '+', 1, -1)*(cast(substring( ATimezoneSign from 2 for 2) as int)*60 + cast(substring( ATimezoneSign from 5 for 2) as int));
  ATIMESTAMP = dateadd(minute, ATimezoneMinutes, ADATE + ATIME);
  suspend;
end
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Прибавить/убавить timezone к timestamp
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]