• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

@zone

  • Автор темы wowa
  • Дата начала
W

wowa

Всем Добрый день.

Существует такая проблема с часовыми зонами. С одним и тем же документом могуть работать люди с разных стран мира. В поле записывается их локальное время, CEDT, CET, EDT ,и т.д.
Мне в историю нужно вывести три даты, основываясь на их локальное время(хранящееся в поле)

| Пусть будет какое-н Европейское | какое-н Американское | локально, которое уже хранится в поле


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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
если заносится в поле типа дата - никаких проблем не вижу
есть ф-ции пересчета у класса NotesDateTime - поиграйтесь
с переходом времени тоже не будет особенных траблав, если админы следят за ОС :(
https://codeby.net/threads/43489.html
 
W

wowa

есть ф-ции пересчета у класса NotesDateTime - поиграйтесь
Да мне собаки нужны :(

@Zone
@TimeZoneToText
@TimeToTextInZone

Пример. Есть такое время: 10/04/2011 10:15:39 PM ZE12 - Вроде Фиджи

Как его перевести, например в Австрийское или Индийское. При условии, что где-то может быть летнее время, а где-то его не переводят...
Это бы время перевести в канонический вид, но не знаю как

Есть такое: @GetCurrentTimeZone , но параметр передать нельзя ;)
 
N

nvyush

Если мне не изменяет склероз, Domino хранит время в UTC, а клиент Lotus сам переводит в локальное в соответствии с региональными настройками.
Или Вы хотите фиджийцам показывать текущее время индусов?
 
W

wowa

Или Вы хотите фиджийцам показывать текущее время индусов?

Что-то типа такого.
Допустим Фиджийцы сохранили документ, по их времени это 13.00. и чтобы в историю было записано
Фиджи Time - 13.00
Russian Time - 07.00
Austrian Time - 05.00


Если мне не изменяет склероз, Domino хранит время в UTC, а клиент Lotus сам переводит в локальное в соответствии с региональными настройками.

Вот как раз таки и не надо чтобы оно все там автоматом переводило. Допустим я из Беларуси, а на компе у меня американские настройки, время и т.д. Чтобы самому все в уме не пересчитывать сколько времени назад док был сохранен, нужно сделать что-то типа такого.

Но главную мысль вы озвучили: "Или Вы хотите фиджийцам показывать текущее время индусов? "
 
W

wowa

Что-то мне подсказывает что надо тупо хардкодить:

Например в Австрии это такое время:

Код:
Austria_Time:= @TimeToTextInZone( Fidji_Time; "Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=97$ZN=W. Europe";"D2T1S3")
 
N

nvyush

ябы так не сказал
Прочитал по приведённой ссылке:
Notes Date & Time Implementation

Notes Time & Date Implementation uses the TIMEDATE data type an internal 2 times 32 bit storage that contains date, time, timezone and daylight saving information

typedef struct tagTIMEDATE {
DWORD Innards[2];
} TIMEDATE;


All TIMEDATEs are internally stored in GMT also called Coordinated Universal Time (UTC) and the timezone and daylight saving settings when storing this information are also saved into this data type.
Что не так?
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
78
Храните одно поле с GMT-временем (приставка " GMT" должна быть в поле явно). Если инициализировать объект NotesDataTime по этому сохранённому GMT-времени, то он в соотв. свойствах с учётом зоны текущей локали и перевода времени сам рассчитает и покажет правильное локальное время. С @-формулами тоже работать без проблем - формула будет для всех одной и той же, - GMT для того и было "сделано")
Добавлено: в крайнем случае можно на открытии дока определять время по NotesDataTime и писать в какой-нить item с SaveToDisk = False, а его уже отображать в истории.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
чесслово не понятен упор в собаки...
в скрипте есть ZoneTime и никаких бубнов не надо

Добавлено: вот так (тупо) отрезать зону:
Код:
Private Function cutZone(dt As Variant) As NotesDateTime
Dim s As String
Dim s1 As String
s=dt.ZoneTime
Dim tmp As New NotesDateTime(Left$(s,Len(s)-3))
Set cutZone=tmp
'check if zone isn't specified
If Year(tmp.LSLocalTime) <> Year(dt.LSLocalTime) Then Set cutZone=dt
End Function

Добавлено: If Year(tmp.LSLocalTime) <> Year(dt.LSLocalTime) Then Set cutZone=dt
эту строку уже не могу объяснить (забыл - почему так делал) :)
скорее всего - не заморачивался на анализ результата от Left, на границе года эта ф-ция не используется (по логике приложения), ситуация с отсутствием TZ - редка
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
78
Я предлагаю немного проще:
Код:
vDateTime = "05.10.2011 07:18:00 GMT"  'пример
Dim ndt As New NotesDateTime(vDateTime)
'ndt.LSLocalTime  'возвращает уже рассчитанное правильное локальное время (с учётом зоны текущей локали и перевода времени, если он включен)
 
30.05.2006
1 345
12
BIT
0
Если мне не изменяет склероз, Domino хранит время в UTC, а клиент Lotus сам переводит в локальное в соответствии с региональными настройками.
Неправда. Время хранится в текущем формате того, кто его "засёк" - вместе с TZ и DST

А.. Опоздал
 
W

wowa

Собаки надо, т.к. это Computed text где строиться HTML и т.д.
Вообщем захардкодил и вот что получилось, мало ли кому-н пригодится или кто-то сможет что-то улучшить

Код:
@Transform( @GetField("HistoryDate"); "x";
@Do(
_DateAustria := @TextToTime(@TimeToTextInZone( x; "Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=97$ZN=W. Europe";"D2T1S3"));
_DateIndia := @TextToTime(@TimeToTextInZone( x; "Z=-3005$DO=0$ZX=42$ZN=India";"D2T1S3"));
_DateLocal := @TextToTime(@TimeToTextInZone( x; @GetCurrentTimeZone;"D2T1S3"))
)
)
 
N

nvyush

Вообщем захардкодил и вот что получилось, мало ли кому-н пригодится или кто-то сможет что-то улучшить
В плане улучшения можно вынести формулу в настроечный документ/профиль, чтобы при необходимости добавить/убавить время не пришлось менять дизайн.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
Собаки надо, т.к. это Computed text где строиться HTML и т.д.
VladSh уже указал - надо создать поле, при открытии формы, а сохраняться ему запретить
и юзайте инфу из этого поля какими хотите собаками
 
W

wowa

_DateAustria := @TextToTime(@TimeToTextInZone( x; "Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=97$ZN=W. Europe";"D2T1S3"));
_DateIndia := @TextToTime(@TimeToTextInZone( x; "Z=-3005$DO=0$ZX=42$ZN=India";"D2T1S3"));

Подскажите, где можно взять список для всех стран канонический вид часового пояса?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!