本文已参与「新人创作礼」活动,一起开启掘金创作之路。
两个平台,一个平台直接查询数据库,另一个平台通过接口调用查询数据,导致时间戳 Timestamp 格式字符串传输后变 yyyy-MM-ddTHH:mm:ss.000+0000 日期格式,出现这种问题的可能原因是:从数据库查询出来的数据没有进行封装,直接使用Map<String, Object>类型保存,导致值类型信息丢失,这是我调试过程中获取的时间字段TME的值:
# 最初获取到的格式【当然也是最终需要的格式】
TME -> {Timestamp@15601} "2021-07-14 18:56:53.0"
# 经过接口传输后变成了时间格式
TME -> 2021-07-14T10:56:53.000+0000
* 将带T的时间字符串转换为时间戳
* @param rowList 带转换列表
* @return
private List<Map<String, Object>> formatTimePattern(List<Map<String, Object>> rowList) {
String timeField = "TME";
rowList.forEach(rowMap->{
rowMap.forEach((key,val)->{
if(timeField.equalsIgnoreCase(key)){
SimpleDateFormat from = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date fromParse = null;
try {
fromParse = from.parse(val.toString());
} catch (ParseException e) {
e.printStackTrace();
assert fromParse != null;
Timestamp timestamp = new Timestamp(fromParse.getTime());
// 用时间戳覆盖之前的时间字符串
rowMap.put(key,timestamp);
return rowList;
时间字段的格式是一个令人头疼的问题,前后端和数据库有可能存放着三种不同类型的时间值。统一使用字符串类型有利于数据的存取展示,但是对数值的操作就不方便了,很多时候来回转换时间字段值的格式就让人奔溃落泪 :sob: 解决的办法是封装,让框架接管时间字段值的格式化任务。