首页
学习
活动
专区
圈层
工具
发布

时区
EN

Stack Overflow用户
提问于 2021-04-24 19:32:02
回答 1查看 62关注 0票数 0

我注意到当地时间有些奇怪。我的应用程序使用time类打印日志:

代码语言:javascript
复制
time: = Time.now.local

如果使用toit执行.命令运行应用程序,控制台上将显示以下跟踪:

代码语言:javascript
复制
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运行.命令运行应用程序,控制台上将显示以下跟踪:

代码语言:javascript
复制
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$ 

我的当地时间:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-25 07:17:42

toit exec运行在Toit服务器上,而toit run运行在设备上。

显然,这两个时区的设置是不同的。设备的本地时间设置为CET/CEST,服务器上的时间(显然)设置为UTC。

理想情况下,应该有一种通过配置文件(或在Toit控制台中)在设备上设置时区的方法。然而,这还不存在。

同时,有一种方法可以在Toit程序中设置时区。set_tz_函数在core.time_impl中使设置TZ变量成为可能:

代码语言:javascript
复制
/**
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/欧洲/哥本哈根

代码语言:javascript
复制
*/
set_tz_ rules/string:
  #primitive.core.set_tz

例如,对以色列来说,人们可以写:

代码语言:javascript
复制
import core.time_impl show set_tz_

main:
  set_tz_ "IST-2IDT,M3.4.4/26,M10.5.0"
  print Time.now

请注意,此函数是私有的(它驻留在_impl.toit文件中,以_结尾),因此不能保证保持稳定。然而,就目前而言,这是实现你想要的最好的(也是唯一的)方法。也没有计划在不久的将来改变它。

还要注意:以这种方式设置时区可能会泄漏一点点内存。如果您只设置一次时区,但避免频繁地在两个时区之间交替,这不是问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67246706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档