处理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