我没有发现时区 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之前确实很脏
答案 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