Lua设备时间格式转换求助:将DD-MON-YY/HH.MM转为ISO8601格式
解决Lua日期时间格式转换问题
你需要先解析原始的日期和时间格式,再重新组装成目标的ISO 8601格式。以下是修改后的代码:
-- 定义月份缩写到数字的映射表 local month_map = { JAN = "01", FEB = "02", MAR = "03", APR = "04", MAY = "05", JUN = "06", JUL = "07", AUG = "08", SEP = "09", OCT = "10", NOV = "11", DEC = "12" } -- 获取原始日期和时间值 local raw_date = self.value['raindate'].value local raw_time = self.value['raintime'].value -- 解析日期:提取日、月份缩写、两位年份 local day, mon_abbr, year_2dig = string.match(raw_date, "(%d+)-(%u+)-(%d+)") -- 补全年份为4位,这里默认处理2000年后的年份,若需兼容更早年份可补充判断逻辑 local year_4dig = "20" .. year_2dig -- 转换月份缩写为两位数字 local mon_num = month_map[mon_abbr] -- 处理时间:替换点为冒号,补全秒、微秒和时区标识 local formatted_time = string.gsub(raw_time, "%.", ":") .. ":00.000000Z" -- 拼接成目标格式 value = string.format("%s-%s-%sT%s", year_4dig, mon_num, day, formatted_time)
代码说明:
- 月份映射表:将设备返回的英文月份缩写转换为标准两位数字,保证格式统一
- 日期解析:通过
string.match提取日期的日、月、年片段,补全年份为4位格式 - 时间处理:把时间中的
.替换为:,追加秒、微秒部分和时区标识Z - 最终拼接:按照
YYYY-MM-DDTHH:MM:SS.ffffffZ的标准格式组合所有部分
测试示例:输入07-NOV-23和16.30,会输出2023-11-07T16:30:00.000000Z,完全符合预期要求。
内容的提问来源于stack exchange,提问作者vishnu anand
相关产品推荐
相关产品推荐

