埃菲尔:如何处理时区?

时间:2018-12-14 10:48:34

标签: timezone eiffel

我没有发现时区 DATE_TIME类和TIME类的任何概念。我错了吗?

如何使用Eiffel库处理时区

是否可以通过{DATE_TIME}.formated_out ("YYYY-MM-DD [0]hh:[0]mi:[0]ss")

进行指定

是否有设置者用于时区?

我已经遇到了使用UTC进行记录的 logger 问题。

我发现的唯一解决方法l.hour_add (-3),它在formated_out之前确实很脏

1 个答案:

答案 0 :(得分:1)

据我所知,类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 date/time library