Eiffel: Как мне обращаться с часовыми поясами? - PullRequest
0 голосов
/ 14 декабря 2018

Я не нашел понятия часовой пояс класс DATE_TIME и класс TIME.Я не прав?

Как мне обработать часовые пояса с библиотекой Eiffel?

Есть ли способ указать это из {DATE_TIME}.formated_out ("YYYY-MM-DD [0]hh:[0]mi:[0]ss")

сеттер для часового пояса?

У меня уже возникла эта проблема с logger , который регистрирует с UTC ...

Единственный обходной путь Я нашел l.hour_add (-3) до formated_out, который действительно грязный

1 Ответ

0 голосов
/ 17 декабря 2018

Насколько я знаю, класс DATE_TIME не содержит никакой информации о часовом поясе, в котором предполагается дата и время.

Если вашему регистратору требуется время UTC, вы можете использовать:

create l_date_time.make_now_utc

вместо:

create l_date_time.make_now

Обратите внимание, что библиотеки Gobo Eiffel имеют некоторую элементарную поддержку часовых поясов, но это не лучше, чем l_date_time.hour_add (-3), потому что дата / время нужнычтобы быть преобразованным из одного часового пояса в другой перед печатью.

local
    l_date_time: DT_DATE_TIME
    l_time_zone: DT_FIXED_OFFSET_TIME_ZONE
    l_date_time_formatter: ST_XSD_DATE_TIME_FORMAT
    s: STRING
do
    create l_date_time_formatter
    create l_time_zone.make_hours_minutes (-3, 0)
    l_date_time := {DT_SHARED_SYSTEM_CLOCK}.system_clock.date_time_now
    s := l_date_time_formatter.date_time_to_string (l_time_zone.date_time_to_utc (l_date_time))

Существует также класс DT_FIXED_OFFSET_ZONED_DATE_TIME, но я боюсь, что он не сделает приведенный выше код менее подробным, потому что вам все еще нужно предоставитьк нему относятся дата и время и связанный с ним часовой пояс.

Возможно, вы также захотите взглянуть на эту другую библиотеку Eiffel: библиотека даты / времени ISO8601

...