Java 8 Java.Time
Package: 解析任何字符串到日期格式对象
我的一个项目,我收到一个要求: 解析一个文本文件,字符串表示的日期或时间戳将有许多不同的格式,不提前知道,然而他们都代表一个有效的日期或时间戳需要正确解析。
所以,我想出的解决方案是这样的:有一组格式存储在属性文件中,当一个字符串需要解析,从文件读取的格式和试图解析的字符串顺序解析,直到解析成功, 或者直到用完所有的格式。
这个解决方案的优点是,如果发现一个有效的字符串没有被成功解析,那么只需要向属性文件添加一种新格式,而不需要重新编译和重新部署。此外,通过这种方式,您可以设置优先级:例如,如果美国的日期格式优于欧洲的格式,那么只需将美国格式放在前面。 而且,在Java 8中,格式字符串允许用'`[]`'表示可选的格式部分。因此,几种格式实际上可以组合成一个带有可选部分的格式。例如:
MM/dd/yyyy
MM-dd-yyyy
MM.dd.yyyy
你可以这样写:
MM['/']['-']['.']dd['/']['-']['.']yyyy
因此,下面是我的一组格式,我发现它们涵盖了广泛的有效日期格式。当然,这个集合并不涵盖所有可能的格式。例如,它不包含日期包含毫秒的选项。但我认为这是一个很好的开始,如果你曾经有这样的要求。就是这样:
M[M]['/']['-']['.']d[d]['/']['-']['.']yyyy[' ']['T'][' ']h[h]:mm:ss[' ']a[' ']['('][VV][X][x][Z][z][O][')']
M[M]['/']['-']['.']d[d]['/']['-']['.']yyyy[' ']['T'][' ']H[H]:mm:ss[' ']['('][VV][X][x][Z][z][O][')']
d[d]['/']['-']['.']M[M]['/']['-']['.']yyyy[' ']['T'][' ']h[h]:mm:ss[' ']a[' ']['('][VV][X][x][Z][z][O][')']
d[d]['/']['-']['.']M[M]['/']['-']['.']yyyy[' ']['T'][' ']H[H]:mm:ss[' ']['('][VV][X][x][Z][z][O][')']
yyyy['/']['-']['.']M[M]['/']['-']['.']d[d][' ']['T'][' ']H[H]:mm:ss[.SSS][' ']['('][VV][X][x][Z][z][O][')']
yyyy['/']['-']['.']M[M]['/']['-']['.']d[d][' ']['T'][' ']h[h]:mm:ss[' ']a[' ']['('][VV][X][x][Z][z][O][')']
M[M]['/']['-']['.']yyyy['/']['-']['.']d[d][' ']['T'][' ']H[H]:mm:ss[' ']['('][VV][X][x][Z][z][O][')']
M[M]['/']['-']['.']yyyy['/']['-']['.']d[d][' ']['T'][' ']h[h]:mm:ss[' ']a[' ']['('][VV][X][x][Z][z][O][')']
d[d]['/']['-']['.']MMM['/']['-']['.']yyyy[' ']['T'][' ']H[H]:mm:ss[' ']['('][VV][X][x][Z][z][O][')']
d[d]['/']['-']['.']MMM['/']['-']['.']yy[' ']['T'][' ']H[H]:mm:ss[' ']['('][VV][X][x][Z][z][O][')']
d[d]['/']['-']['.']MMM['/']['-']['.']yyyy[' ']['T'][' ']h[h]:mm:ss[' ']a[' ']['('][VV][X][x][Z][z][O][')']
d[d]['/']['-']['.']MMM['/']['-']['.']yy[' ']['T'][' ']h[h]:mm:ss[' ']a[' ']['('][VV][X][x][Z][z][O][')']
MMM['/']['-']['.']d[d]['/']['-']['.']yyyy[' ']['T'][' ']H[H]:mm:ss[' ']['('][VV][X][x][Z][z][O][')']
MMM['/']['-']['.']d[d]['/']['-']['.']yy[' ']['T'][' ']H[H]:mm:ss[' ']['('][VV][X][x][Z][z][O][')']
MMM['/']['-']['.']d[d]['/']['-']['.']yyyy[' ']['T'][' ']h[h]:mm:ss[' ']a[' ']['('][VV][X][x][Z][z][O][')']
MMM['/']['-']['.']d[d]['/']['-']['.']yy[' ']['T'][' ']h[h]:mm:ss[' ']a[' ']['('][VV][X][x][Z][z][O][')']
关键类: java.time.LocalDate & java.time.format.DateTimeFormatter
格式化快乐!