我注意到当地时间有些奇怪。我的应用程序使用time类打印日志:
time: = Time.now.local如果使用toit执行.命令运行应用程序,控制台上将显示以下跟踪:
micrcx@micrcx-desktop:~/toit_apps/Hsm2/tests$ toit execute test_hsm_switch_async_4.toit
18:31:53.532 exec [init INIT 0]
18:31:53.533 exec [switch Q_ENTRY 0]
18:31:53.535 exec [switch Q_INIT 0]
18:31:53.537 exec [off Q_ENTRY 0]
18:31:53.539 exec [off TURN 1]
18:31:53.540 exec [on Q_ENTRY 1]
18:31:53.543 exec [on TURN 2]
18:31:53.544 exec [off Q_ENTRY 2]
18:31:53.546 exec [off TURN 3]
18:31:53.548 exec [on Q_ENTRY 3]
18:31:53.549 exec [on RESET 4]
18:31:53.550 exec [switch Q_INIT 4]
18:31:53.552 exec [off Q_ENTRY 4]
^C
micrcx@micrcx-desktop:~/toit_apps/Hsm2/tests$如果使用toit运行.命令运行应用程序,控制台上将显示以下跟踪:
micrcx@micrcx-desktop:~/toit_apps/Hsm2/tests$ toit run test_hsm_switch_async_4.toit
2021-04-24T18:34:12.677531Z: <process initiated>
20:34:12.536 exec [init INIT 0]
20:34:12.663 exec [switch Q_ENTRY 0]
20:34:12.705 exec [switch Q_INIT 0]
20:34:12.776 exec [off Q_ENTRY 0]
20:34:12.869 exec [off TURN 1]
20:34:13.055 exec [on Q_ENTRY 1]
20:34:13.160 exec [on TURN 2]
20:34:13.234 exec [off Q_ENTRY 2]
20:34:13.323 exec [off TURN 3]
20:34:13.397 exec [on Q_ENTRY 3]
20:34:13.569 exec [on RESET 4]
20:34:13.776 exec [switch Q_INIT 4]
20:34:13.826 exec [off Q_ENTRY 4]
^C
micrcx@micrcx-desktop:~/toit_apps/Hsm2/tests$ 我的当地时间:
micrcx@micrcx-desktop:~/toit_apps/Hsm2/tests$ date
Sat 24 Apr 2021 21:37:07 IDT
micrcx@micrcx-desktop:~/toit_apps/Hsm2/tests$ 所以,我的当地时间是21:00,ESP32 - 20:00,以及云- 18:00。从20:00看,一切或多或少都很清楚:这次是在哥本哈根,我的时间比它提前了一个小时。我不能说任何关于云(真的格陵兰?),我只是陈述事实的差异。我有一个简单的问题:能把时间带到我的本地时间吗?在本例中,转到21:00。也许toit中有一些函数可以设置当前的时区?如Time.setTimeZone“US/New York”或Time.setTimeZone“DK/哥本哈根”、Time.setTimeZone“IL/耶路撒冷”、Time.setTimeZone "UK/London“等.
你好,MK
发布于 2021-04-25 07:17:42
toit exec运行在Toit服务器上,而toit run运行在设备上。
显然,这两个时区的设置是不同的。设备的本地时间设置为CET/CEST,服务器上的时间(显然)设置为UTC。
理想情况下,应该有一种通过配置文件(或在Toit控制台中)在设备上设置时区的方法。然而,这还不存在。
同时,有一种方法可以在Toit程序中设置时区。set_tz_函数在core.time_impl中使设置TZ变量成为可能:
/**
Stores the given $rules in the `TZ` environment variable and
calls `tzset`, thus activating it.
Valid TZ values can be easily obtained by looking at the last line of the
zoneinfo files on Linux machines:尾部-n1 /usr/share/zoneinfo/欧洲/哥本哈根
*/
set_tz_ rules/string:
#primitive.core.set_tz例如,对以色列来说,人们可以写:
import core.time_impl show set_tz_
main:
set_tz_ "IST-2IDT,M3.4.4/26,M10.5.0"
print Time.now请注意,此函数是私有的(它驻留在_impl.toit文件中,以_结尾),因此不能保证保持稳定。然而,就目前而言,这是实现你想要的最好的(也是唯一的)方法。也没有计划在不久的将来改变它。
还要注意:以这种方式设置时区可能会泄漏一点点内存。如果您只设置一次时区,但避免频繁地在两个时区之间交替,这不是问题。
https://stackoverflow.com/questions/67246706
复制相似问题