1

java时间格式化遇到的一个问题

有一个时间,格式如下

1
04-JAN-19 02.20.01.207000 AM  这个格式的字符串转换为Date

猛一看看不出来年月日,时分秒,但是数据很多,经过分析应该是

1
日-月-年 时.分.秒.微秒 上午

第一个问题是,微妙怎么办,java时间格式化里面的微妙是用大学的S表示,而且java里面只认3位,这个是六位。但是数据非常漂亮,通过对数据的分析所有的微妙后三位都是0,那就把这三个0当做看不见啦,只取前三位就可以当一个微秒来用,用SSS转换

第二个问题,字符串里面的月份是因为的,如果直接用HH会报错,从网上找到一个参数 Locale.ENGLISH,配置英文格式,然后就可以啦。

第二个问题,就是AM和PM的问题,发现几个指定的字符串可以解决这个问题。把a标签和 K标签一起用,就可以把原来的时间进行正确解析。

名称 字段 说明
yyyy或YYYY 小于等于4个都是一样的,大于的会在前面补0
年中的月份 MMM 例如:Jan,英文月
年中的月份 MM 例如01,数字月,2个M,1-9月前补0
年中的周数 w
月中的周数 W
年中的天数 D Number 189
月份中的天数 d Number 10
数字星期 F 周四显示4
英语星期 E 周四显示Thu
Am/pm 标记 a PM AM
一天中的小时数(0-23) H 0
一天中的小时数(1-24) k 24
am/pm 中的小时数(0-11) K 0
am/pm 中的小时数(1-12) h 12
1
2
3
4
5
6
7
8
9
10
11
12
public class DataFormat {
public static void main(String[] args) throws ParseException {
Date date = dateStrFormat("04-JAN-19 02.20.01.207000 PM");
String format = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS").format(date);
System.out.println("解析后的结果"+format);
}
public static Date dateStrFormat(String dateStr) throws ParseException {
SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yy h.m.s.SSS a", Locale.ENGLISH);
String replace = dateStr.trim().replace("000 ", " ");
return f.parse(replace);
}
}

标准的时间格式应该是

1
yyyy-MM-dd HH:mm:ss