处理SIM800L模块的时间字符串

SIM800L 模块运行在文本模式时,收到的短信时间格式类似:

20/03/15,14:05:33+32

 

这不是一个标准的UTC时间表示方式(SIM800的+32表示的是+8区 ),所以我们需要通过 JAVA 的 SimpleDateFormat 类来处理。

z    Time zone    General time zone    Pacific Standard Time; PST; GMT-08:00
Z    Time zone    RFC 822 time zone    -0800
X    Time zone    ISO 8601 time zone    -08; -0800; -08:00

SimpleDateFormat 类可以识别的时区信息是上面三种,所以我们需要先把字符串转换成以上可识别格式。转换过程略,下面是转换的待处理时间字符串:

20/03/15,14:05:33+08

 

首先使用给定的日期格式构造一个SimpleDateFormat对象,使用SimpleDateFormat的parse() 方法通过解析输入字符串来构造一个Date对象:

SimpleDateFormat simpleDateFormat = new SimpleDateFormaet("yy/MM/dd,HH,mm,ssX"):
Date date = simpleDateFormat.parse("20/03/15,14:05:33+08");

因为MySQL数据库时间字段类型我们使用的是Timestamp,我们还需要将Date对象转换为Timestamp对象。

Timestamp类支持使用一个long类型的毫秒时间值来构造一个Timestamp对象,Date类正好有一个getTime()方法可以返回一个long类型时间值,所以:

Timestamp timestamp = new Timestamp(date.getTime());

 

使用带时区的UTC时间是为了保持前后端时间正确性。

 

参考资料:

https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html

https://docs.oracle.com/javase/7/docs/api/java/sql/Timestamp.html

https://docs.oracle.com/javase/8/docs/api/java/util/Date.html

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

 

posted @ 2020-03-15 22:57  1x11  阅读(322)  评论(0编辑  收藏  举报