【问题标题】:How can I create Date Object from Date and Time Strings in Lua NodeMCU?如何从 Lua NodeMCU 中的日期和时间字符串创建日期对象?
【发布时间】:2016-11-19 00:50:43
【问题描述】:

我在 ESP8266 上玩 NodeMCU。我有一个来自 Web 请求的日期字符串和时间字符串,如下所示:

15.07.16(德文格式 DD.MM.YY)

19:50(24 小时制)

这些日期时间通常在未来一点。我想从上面的字符串中获取从当前时间到时间的分钟数。

我想我必须从字符串中创建一个时间对象,然后将其与当前时间进行比较。但是我怎么能用 Lua 做到这一点呢?

不幸的是 NodeMCU 上没有 os 库(或者我可能错过了如何启用它)。

手动计算差异将是一个巨大的痛苦,我想避免。有谁知道用可用或外部库计算它的方法?

感谢大家的支持!

【问题讨论】:

  • www.google.com 输入“lua 时间”。打开第一个结果...如果您想使用 Lua,我强烈建议您至少阅读涵盖这两个主题的语言参考。它还将回答许多即将提出的问题。
  • 感谢您的快速回答。我当然已经这样做了。但是在我的 ESP8266 上没有 os,也没有 os.time
  • 这个可以关闭吗?

标签: string time lua esp8266 nodemcu


【解决方案1】:

首先你使用 Lua 的字符串库从字符串中获取数字:

https://www.lua.org/pil/20.html

https://www.lua.org/manual/5.3/manual.html#6.4

然后你使用 Lua 的 os 库进行时间计算:

https://www.lua.org/pil/22.1.html

https://www.lua.org/manual/5.3/manual.html#6.9

我不会给你更多信息,因为你没有表现出自己解决问题的任何努力。

插件:

由于您没有 os 库(不知道),您可以简单地自己计算这些东西。

使用 string.sub 或字符串模式从字符串中获取月、年小时和分钟数。

然后简单地计算时间差。你知道每个月有多少天。你知道每小时多少分钟和每天多少小时。 判断年份是否为闰年(如果你不知道怎么做:https://support.microsoft.com/en-us/kb/214019

【讨论】:

  • 对不起,我应该说,我使用nodeMCU。固件上没有操作系统库。
  • 顺便说一句,不需要对我投反对票,只是因为你相信我没有表现出任何努力自己解决它。我提供了所有需要的信息,除了我使用的是 nodeMCU。你的回答太傲慢了,对 ESP 上的人一点帮助都没有。
  • 您的问题不符合关于 SO 的好问题的建议。所以我不赞成。就那么简单。阅读How to Ask
  • @Piglet 我不想就 SO 上的好/坏风格进行一场激烈的战争。因此,这是我将留下的唯一评论。除了缺少NodeMCU 关键字之外,IMO 问题完全没问题。我希望新加入 SO 的人能受到更多的同情和友好的指导。
  • @Piglet 还是谢谢你。我正在寻找一种计算方法。我不可能手动这样做。
【解决方案2】:

pending PRrtctime 完全相反,Unix 纪元到 UTC 日历。

如果您将字符串转换为 Unix 纪元 X,您可以这样做

-- delta in minutes
local delta = (X - rtctime.get()) / 60

您可以自己计算 X,由于闰年和秒以及其他日期/时间异常,这绝非易事,或者您可以向 http://www.convert-unix-time.com/api?date=15.07.2016%2019:50&timezone=Vienna&format=german 发送请求并从中提取时间戳。

【讨论】:

  • 谢谢马塞尔!这看起来很有希望。简单直接。我刚刚注意到,我的固件没有使用 rtctime 支持编译。所以我明天会试试,让你知道。
  • 考虑固件中对X范围的浮点支持。
  • 我刚刚做了一个支持 rtctime 的自定义构建。你有什么想法,为什么 rtctime.get() 为我返回 0,0?
  • 我发现了这个.... "当 ESP8266 启动时,实时时钟 (RTC) 未初始化。如果您的物联网项目需要在其生成的数据中提供时间戳,那么您的代码网络可用后,将需要从服务器获取当前日期时间。”所以 RTC 对我来说没用。但是我能做的是发送一个对 x 的请求和一个对 currentTime 的请求(我之前在一些 http 标头中作为字符串得到),然后简单地减去时间戳。这将需要更多的 http 请求,但我找不到更好的方法。
  • 直接进入源代码并阅读 rtctime 模块的介绍以了解其运作方式。它解释了如何结合 SNTP 模块使用它来同步时间。作为替代方案,您可以将 HTTP HEAD 请求发送到受信任的服务器,并从响应标头中解析时间戳。 Jason 对此有一篇不错的博文:blog.falafel.com/set-current-datetime-nodemcu
猜你喜欢
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
相关资源
最近更新 更多