我正在使用 AT 命令读取短信,就像 this tutorial 中一样。当我阅读这些消息时,我想知道这些短信有多“老”。 SMSC 收到 SMS 时的信息包含在 SMS 中,以纯文本形式表示为:
+CMGL: 1,"REC UNREAD","+85291234567",,"07/02/18,00:05:10+32"
Reading text messages is easy.
我应该如何解析这个“07/02/18,00:05:10+32”
?我的意思是,+32 是什么意思?它不能与 UTC 相差 32 小时。
此外,如果一条短信从日本发送到法国,列出该短信时会显示几点钟?日本 SMSC 的时间?来自法国短信中心?如何将它们转换为 UTC,以可靠地计算从 SMS 发送(到达 SMSC)到我阅读的那一刻所耗时?
并不是真的在这里寻找具体实现的答案,但如果重要的话,我会在 shell 脚本中进行数学计算
最佳答案
这个答案证实了eBusians's answer ,但展示了如何使用权威引用文献而不是依赖随机网页得出相同的结论(有些很好,但很多不是)。链接网页上的文本并不错误,但它仅涉及 AT+CMGS 命令,而不是此处询问的 AT+CMGL 命令,因此您必须猜测/假设它们的格式相同,而不是好方法。
描述 AT+CMGL
的文档命令是27.005标准(或调制解调器制造商自己的特定产品文档)。它将语法定义为
+CMGL: <index>,<stat>,<oa/da>,[<alpha>],[<scts>][,<tooa/toda>,<length>]
<CR><LF><data>
和<scts>
定义为
3GPP TS 23.040 [3] TP-Service-Centre-Time-Stamp in time-string format (refer <dt>)
和<dt>
定义为
3GPP TS 23.040 [3] TP-Discharge-Time in time-string format: "yy/MM/dd,hh:mm:ss±zz", where characters indicate year (two last digits), month, day, hour, minutes, seconds and time zone. E.g. 6th of May 1994, 22:10:00 GMT+2 hours equals to "94/05/06,22:10:00+08"
此时我没有费心去深入研究 23.040 规范,因为示例中的 2 <==> 8 关系与 eBusians 的答案一致,我没有理由怀疑它的正确性。
关于datetime - 解析短信日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428719/