On-line: Alex_Cher, гостей 2. Всего: 3 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 6896
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.02.21 23:51. Заголовок: Как узнать часовой пояс установленный у юзера ?


Как узнать часовой пояс UTC установленный на ПК средствами Harbour ?

В базе PostgreSql на сайте время пишу без учёта часовых поясов.
А у юзера на ПК нужно выводить время с учётом часового пояса.
Как это сделать на Харборе ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 16 [только новые]


Администратор




Пост N: 4000
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.03.21 09:25. Заголовок: Есть функция winapi ..


Есть функция winapi GetTimeZoneInformation
Она заполняет структуру TIME_ZONE_INFORMATION, которая содержит поля - названия часового пояса, смещение от utc в минутах, и еще некоторые.
Обертки нет ни в харборе, ни в hmg

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6897
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.03.21 11:15. Заголовок: А вот у этих есть чт..


А вот у этих есть что-то http://forums.fivetechsupport.com/viewtopic.php?f=3&t=28628
Но мне с моим английским, трудно понять....

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4001
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.03.21 11:28. Заголовок: Так в наше время что..


Так в наше время чтобы понять достаточно гуглтранслейта
А что надо то ? В этой теме тоже нет обертки. Надо название или смещение в минутах ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4002
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.03.21 11:57. Заголовок: #include <window..


#include <windows.h> 

HB_FUNC( GETTIMEZONEMIN )
{
TIME_ZONE_INFORMATION tzi;
DWORD lRet = GetTimeZoneInformation(&tzi);

if( lRet == TIME_ZONE_ID_INVALID )
hb_retnl( -1 );
else
hb_retnl( tzi.Bias );
}


Такая функция у меня вернула -180 (UTC+3, московское время )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1588
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 01.03.21 12:54. Заголовок: А еще можно использо..


А еще можно использовать встроенные функции

hb_UTCOffset
hb_TSToUTC

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1589
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 01.03.21 12:58. Заголовок: Pasha пишет: Надо н..


Pasha пишет:

 цитата:
Надо название или смещение в минутах ?


А вот действительно, что нужно?
hb_UTCOffset возвращает смещение в секундах.
А если нужно название - простенькую UDF набросать.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6898
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.03.21 15:56. Заголовок: Pasha пишет: Надо н..


Pasha пишет:

 цитата:
Надо название или смещение в минутах ?



У меня на сайте в таблицу (база PostgreSql) в колонку (timestamp with time zone) пишется время выполнения с телефонов мастеров.
Далее делаю импорт таблицы в dbf Харбора и вот тут в поле TimeLog надо писать время с учётом часового пояса.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1590
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 01.03.21 17:28. Заголовок: Andrey пишет: Далее..


Andrey пишет:

 цитата:
Далее делаю импорт таблицы



Если импорт выполнен с использованием sddpg (Postgre SQL Database Driver) то поле timestamp with time zone импортируется в виде строки в 26 символов и эту строку просто нужно правильно интерпретировать.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4003
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.03.21 17:32. Заголовок: hb_TSToUTC переводит..


hb_TSToUTC переводит локальное время в utc. Нам надо наоборот. Такой функции нет, но обойдемся и без нее

делаем так:
пусть dt - время в utc

тогда

dt + (dt - hb_tstoutc(dt)) - локальное время

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6899
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.03.21 17:45. Заголовок: Да, при импорте полу..


Да, при импорте получается строка из которой выделяю время. Получается текстовая строка.
А как дальше её преобразовать с учётом часового пояса ?
Допустим строка cTime := "07:39:56"
А дальше пока не придумал как сделать...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1591
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 02.03.21 00:31. Заголовок: Andrey пишет: Допус..


Andrey пишет:

 цитата:
Допустим строка cTime := "07:39:56"


Работать нужно не с time, а с timestamp
Как-то так

function main()
local ts, tsU

ts := hb_StrToTS("2021-03-02 01:12:13.10")
? hb_strFormat("%1$02d:%2$02d:%3$02d", hb_Hour(ts), hb_Minute(ts), hb_Sec(ts))

tsU := hb_TSToUTC( ts )
? hb_strFormat("%1$02d:%2$02d:%3$02d", hb_Hour(tsU), hb_Minute(tsU), hb_Sec(tsU))

return 0

Ну и ответ на вопрос вынесенный в название темы (упрощенное решение)

function main()
local tz := int(hb_UTCOffset()/(60*60))

? hb_strFormat("UTC%1$+d", tz)

return 0

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6900
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.03.21 02:48. Заголовок: Петр пишет: Работат..


Петр пишет:

 цитата:
Работать нужно не с time, а с timestamp
Как-то так


Спасибо БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4004
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.03.21 08:36. Заголовок: Если переводить utc ..


Если переводить utc время в локальное через hb_utcoffset, то лучше этой функции передавать параметр, иначе для часового пояса, в котором летнее и зимнее время различны, результат может искажаться на час

пусть dt - дата+время в utc

тогда перевод в локальное время можно сделать так

dt + (dt - hb_tstoutc(dt))

или так:

dt + hb_UTCOffset(dt)/(3600*24)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6901
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.03.21 10:10. Заголовок: Спасибо БОЛЬШОЕ Pash..


Спасибо БОЛЬШОЕ Pasha !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1592
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 02.03.21 11:39. Заголовок: Нюансы, конечно, ест..


Нюансы, конечно, есть.

И в идеале Андрею лучше бы было использовать возможности сервера для преобразования дат.
У pg отличная документация, в т.ч. и на русском.
Но и все остальное нужно знать - что такое временные зоны, какие возможности в работу с временем и датами Harbour, нужно учитывать где установлен и как настроен SQL сервер, какой тип полей используется в БД.

А без понимания всего этого можно и накосячить

Андрею рекомендую прочитать, может подтолкнет к правильным выводам - Как в PostgreSQL привести дату TIMESTAMP WITH TIME ZONE к часовому поясу

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6902
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.03.21 22:49. Заголовок: Петр Спасибо БОЛЬШОЕ..


Петр Спасибо БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 165
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет