powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Подскажите как лучше конвертировать время в секунды и обратно ?
5 сообщений из 5, страница 1 из 1
Подскажите как лучше конвертировать время в секунды и обратно ?
    #33037727
Фотография Жорик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Все даты в базе хранятся в секундах
как конвертировать эти даты в/из нормальный формат DATETIME а также как лучше хранить разницу времен и манипулировать ими ?

Спасибо.
...
Рейтинг: 0 / 0
Подскажите как лучше конвертировать время в секунды и обратно ?
    #33038246
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
секунды в датетиме
dbinfo('utc_to_datetime',sh_curtime)
...
Рейтинг: 0 / 0
Подскажите как лучше конвертировать время в секунды и обратно ?
    #33038919
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для хранения и манипуляции с временными периодами в Информиксе существует специальный тип Interval
...
Рейтинг: 0 / 0
Подскажите как лучше конвертировать время в секунды и обратно ?
    #33039309
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жорик
Все даты в базе хранятся в секундах
как конвертировать эти даты в/из нормальный формат DATETIME а также как лучше хранить разницу времен и манипулировать ими ?

Если быть точным, то "ДАТЫ в БАЗЕ" хранятся в днях.
Если речь идет о временной точке, то тогда в секундах.
Для преобразования различных временных точек есть куча функций.
Например, EXTEND.
Для получения некоторого представления о возможных преобразованиях
того же текущего времени могу предложить посмотреть нижеследующий работающий скрипт .
------------------------------------------------------------
-- With IDS 7.3x use the following expressions in a view
-- to provide various ways of interpreting a CURRENT TIME
--
-- V.Shulzenko DBA_Tools
------------------------------------------------------------
SELECT
------------------------------------------------------------
-- CURRENT TIME
------------------------------------------------------------
-- в формате DATETIME (local time)
CURRENT standart_current -- standart function
,CURRENT YEAR TO SECOND current_year2sec -- to get the server's local time
,CURRENT year to fraction(5) current_fraction5
-- время в секундах с 1.1.1970 превратить в datetime (локальное время)
,DBINFO('utc_to_datetime',sh_curtime) local_sysshmvals
,DBINFO('utc_to_datetime',DBINFO('utc_current')) local_dbinfo
-- количество секунд с 1.1.1970
,sh_curtime seconds_shmvals
,DBINFO('utc_current') seconds_dbinfo
-- текущее время внутри процедуры (с точностью до целых секунд и по Гринвичу) UTC
-- (by Leonid Vorontsov)
-- (не работает после 9 сентября 2001 - В.Шульженко)
-- ,DATETIME( 1970-01-01 00:00:00 ) YEAR TO SECOND
-- + sh_curtime UNITS SECOND GMT_sysshmvals
-- После 2001-09-09 01:46:39 (by Alex Gradinar)
,CASE WHEN sh_curtime > 999999999
THEN DATETIME(1970-01-01 00:00:00) YEAR TO SECOND + 999999999 UNITS SECOND +
(sh_curtime - 999999999) UNITS SECOND
ELSE DATETIME( 1970-01-01 00:00:00 ) YEAR TO SECOND + sh_curtime UNITS SECOND
END AS GMT_sysshmvals
-- The value of dbinfo('utc_current') varies during the execution of a statement, but the value of CURRENT does not.
-- SPL function in the IIUG Software Archive UNIXTIME_TO_DATETIME converts an integer number of seconds since
-- the Epoch (1970-01-01 00:00:00 +00:00) into a datetime year to second (in UTC).
-- Должна возвращать таймзону, например GMT+2 (но не работает)
,DBINFO('get_tz') time_zone -- ??
---------
-- A. Daugava (SQL.RU)
-- create function "informix".cur_time() RETURNING DATETIME YEAR TO SECOND;
-- DEFINE D DATETIME YEAR TO SECOND;
-- select EXTEND (mdy(9,9,2001),YEAR TO SECOND)
-- +(sh_curtime-999982800-3600) UNITS SECOND INTO D from sysmaster:sysshmvals;
-- Одна проблема, переход на летнее время не учитывается.
-- mdy(9,9,2001) - в эту дату количество секунд в unixtime зашкаливает за миллиард,
-- по крайней мере на 7-ке и 9.2 есть проблемы со сложением UNITS SECOND с такими цифрами,
-- поэтому с помощью поправочного коэфициента "999982800" подбираем нужное нам время.
-- "-3600" - дополнительная поправка на зимнее время :-).
------------------------------------------------------------
-- When or How long has a user been connected
,(select
-- после 09.09.01 показывает текущее время, т.е работает неправильно.
-- extend(current - connected units second), hour to second) elapsed_time
-- нижеследующие работают всегда правильно
-- extend(dbinfo('utc_to_datetime', connected),hour to second) start_time
current hour to second -
extend(dbinfo('utc_to_datetime',connected),hour to second) elapsed_time
from syssessions
where sid=dbinfo('sessionid')
) time_connected
------------------------------------------------------------
-- Разница с Гринвичем (т.е. временной пояс) (работает правильно только до 09.09.01)
-- ,extend(current - (sh_curtime-1) units second, hour to second) GMT_Time_plus
-- Разница с Гринвичем (т.е. временной пояс) только для GMT+
,extend((current-999999999 units second) - (sh_curtime-999999999-1) units second, hour to second) GMT_Time_plus1
,DBINFO('utc_to_datetime',sh_curtime) - (DATETIME(1970-01-01 00:00:00) YEAR TO
SECOND + 999999999 UNITS SECOND + (sh_curtime - 999999999) UNITS SECOND) GMT_Time_plus2
------------------------------------------------------------
-- Время сбора статистики на сервере
------------------------------------------------------------
,current day to second -
EXTEND(dbinfo('utc_to_datetime',sh_pfclrtime),day to second) statistic_time
------------------------------------------------------------
-- USEOSTIME=0 в некоторых версиях приводит к ошибке для fraction(5) (7.31.ТС2-5)
-- Лечится установкой USEOSTIME=1.
------------------------------------------------------------
FROM sysshmvals;
...
Рейтинг: 0 / 0
Подскажите как лучше конвертировать время в секунды и обратно ?
    #33042078
zest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю свои 5 копеек, может понадобится. Только работает с секундами

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
DROP FUNCTION Datetime2Second;

CREATE FUNCTION Datetime2Second (dt DATETIME YEAR TO SECOND)
	RETURNING INT;

	DEFINE checkpoint INT;
	DEFINE curr INTERVAL SECOND( 9 ) TO FRACTION; 
	DEFINE retval INT;
	
	LET checkpoint =  946684800 ; 		
	
	LET curr = dt - EXTEND(DATE('1/1/2000'), YEAR TO FRACTION); 
	LET retval = CAST(CAST(curr AS VARCHAR( 64 )) AS INT);

	RETURN (retval +  946684800 ) ;
END FUNCTION;

DROP PROCEDURE Second2Datetime ;

CREATE FUNCTION Second2Datetime (sc INT)
	RETURNING DATETIME YEAR TO SECOND;

	DEFINE checkpoint INT;
	DEFINE retval DATETIME YEAR TO SECOND;

	LET checkpoint =  946684800 ; 		

	LET retval = CAST(
		(EXTEND(DATE('1/1/2000'), YEAR TO SECOND) 
		+ 
		(sc -  946684800 ) UNITS SECOND) AS DATETIME YEAR TO SECOND
					); 

	RETURN retval;
END FUNCTION;


select Datetime2Second(current) FROM sysmaster:sysshmvals; 
-- 1114764857

select Second2Datetime ( 1114764857 ) FROM sysmaster:sysshmvals; 
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Подскажите как лучше конвертировать время в секунды и обратно ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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