@zone

Тема в разделе "Lotus - Программирование", создана пользователем wowa, 4 окт 2011.

  1. wowa

    wowa Well-Known Member

    Репутация:
    0
    Регистрация:
    1 фев 2007
    Сообщения:
    841
    Симпатии:
    0
    Всем Добрый день.

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

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


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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.357
    Симпатии:
    334
    если заносится в поле типа дата - никаких проблем не вижу
    есть ф-ции пересчета у класса NotesDateTime - поиграйтесь
    с переходом времени тоже не будет особенных траблав, если админы следят за ОС :(
    http://codeby.net/forum/threads/43489.html
     
  3. wowa

    wowa Well-Known Member

    Репутация:
    0
    Регистрация:
    1 фев 2007
    Сообщения:
    841
    Симпатии:
    0
    Да мне собаки нужны :(

    @Zone
    @TimeZoneToText
    @TimeToTextInZone

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

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

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

    nvyush Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Если мне не изменяет склероз, Domino хранит время в UTC, а клиент Lotus сам переводит в локальное в соответствии с региональными настройками.
    Или Вы хотите фиджийцам показывать текущее время индусов?
     
  5. wowa

    wowa Well-Known Member

    Репутация:
    0
    Регистрация:
    1 фев 2007
    Сообщения:
    841
    Симпатии:
    0
    Что-то типа такого.
    Допустим Фиджийцы сохранили документ, по их времени это 13.00. и чтобы в историю было записано
    Фиджи Time - 13.00
    Russian Time - 07.00
    Austrian Time - 05.00


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

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

    wowa Well-Known Member

    Репутация:
    0
    Регистрация:
    1 фев 2007
    Сообщения:
    841
    Симпатии:
    0
    Что-то мне подсказывает что надо тупо хардкодить:

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

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.357
    Симпатии:
    334
  8. nvyush

    nvyush Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Прочитал по приведённой ссылке:
    Что не так?
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.357
    Симпатии:
    334
    иными словами ЕШЁ там хранится и DST и TZ
     
  10. VladSh

    VladSh начинающий
    Lotus team

    Репутация:
    0
    Регистрация:
    11 дек 2009
    Сообщения:
    1.248
    Симпатии:
    2
    Храните одно поле с GMT-временем (приставка " GMT" должна быть в поле явно). Если инициализировать объект NotesDataTime по этому сохранённому GMT-времени, то он в соотв. свойствах с учётом зоны текущей локали и перевода времени сам рассчитает и покажет правильное локальное время. С @-формулами тоже работать без проблем - формула будет для всех одной и той же, - GMT для того и было "сделано")
    Добавлено: в крайнем случае можно на открытии дока определять время по NotesDataTime и писать в какой-нить item с SaveToDisk = False, а его уже отображать в истории.
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.357
    Симпатии:
    334
    чесслово не понятен упор в собаки...
    в скрипте есть ZoneTime и никаких бубнов не надо

    Добавлено: вот так (тупо) отрезать зону:
    Код (LotusScript):
    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 - редка
     
  12. VladSh

    VladSh начинающий
    Lotus team

    Репутация:
    0
    Регистрация:
    11 дек 2009
    Сообщения:
    1.248
    Симпатии:
    2
    Я предлагаю немного проще:
    Код (Text):
    vDateTime = "05.10.2011 07:18:00 GMT"  'пример
    Dim ndt As New NotesDateTime(vDateTime)
    'ndt.LSLocalTime  'возвращает уже рассчитанное правильное локальное время (с учётом зоны текущей локали и перевода времени, если он включен)
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.357
    Симпатии:
    334
    дело "за малым" - хранить всё в GMT, тока не часто такое бывает, а ещё и конвертят в текст...
    ну вощем - речь о приложениях с богатой историей ;)
     
  14. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    30 май 2006
    Сообщения:
    1.322
    Симпатии:
    4
    Неправда. Время хранится в текущем формате того, кто его "засёк" - вместе с TZ и DST

    А.. Опоздал
     
  15. wowa

    wowa Well-Known Member

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

    Код (Text):
    @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"))
    )
    )
     
  16. nvyush

    nvyush Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    В плане улучшения можно вынести формулу в настроечный документ/профиль, чтобы при необходимости добавить/убавить время не пришлось менять дизайн.
     
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.357
    Симпатии:
    334
    VladSh уже указал - надо создать поле, при открытии формы, а сохраняться ему запретить
    и юзайте инфу из этого поля какими хотите собаками
     
  18. wowa

    wowa Well-Known Member

    Репутация:
    0
    Регистрация:
    1 фев 2007
    Сообщения:
    841
    Симпатии:
    0
    Подскажите, где можно взять список для всех стран канонический вид часового пояса?
     

Поделиться этой страницей