如何从日期和时间字符串在Lua NodeMCU中创建日期对象?

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

15.07.16(德国日期格式DD.MM.YY)

19:50(24小时格式)

这些日期时间通常略微超前。我想要得到从当前时间到上面的字符串时间的分钟数。

我猜我必须从字符串中创建一个时间对象,然后将其与当前时间进行比较。但是,我如何使用Lua实现呢?

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

手动计算差异将是一个巨大的痛苦,我想避免。有人知道如何使用可用或外部库计算吗?

感谢任何支持!

点赞
用户2858170
用户2858170

首先,您可以使用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或string模式从字符串中获取月份,年份,小时和分钟数。

然后简单地计算时间差。您知道每个月有多少天。您知道每小时有多少分钟,每天有多少小时。

确定年份是否为闰年(如果您不知道如何:https://support.microsoft.com/en-us/kb/214019)。

2016-07-15 19:55:33
用户131929
用户131929

有一个待处理的 PR,用于 rtctime 将 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 中提取时间戳。

2016-07-15 22:09:56