将 armydate 长数字解析为 LocalDate

parse armydate long number to LocalDate

我有一个长号格式:
Long l = 20151228;

我想把它解析成 LocalDate 对象。

我该怎么做?

一种方法是将 long 转换为 String 并使用 SimpleDateFormat:

解析它
long l = 20151228L;
DateFormat df = new SimpleDateFormat("yyyyMMdd");
Date d = df.parse(String.valueOf(l));

使用 java.time,您可以将数字分解成各自的部分,然后使用静态方法 LocalDate.of 从它们构建本地日期。

long militaryDate = 20151228L;
LocalDate ld = LocalDate.of((int) (militaryDate / 10000),
                            Month.of((int) (militaryDate / 100) % 100),
                            (int) (militaryDate % 100));

System.out.println(ld);

结果:

2015-12-28
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse( df.format(df.parse(String.valueOf(l)) );

我建议使用 LocalDate::parse(String, DateTimeFormatter),如下所示:

Long l = 20151228L;
LocalDate date = LocalDate.parse(Long.toString(l), DateTimeFormatter.ofPattern("yyyyMMdd"));
System.out.println(date);

结果:

2015-12-28

我更喜欢 RealSkeptic 的答案,因为它是最有效的答案,但如果您对模运算不满意,我会为您提供另一种选择。

您为日期使用的整数格式实际上是 BASIC_ISO_DATE 格式。因此,您可以为此使用现有的 java.time 格式化程序:

int dateAsInt = 20151228;  // btw no need to use long as it fits easily in an int
LocalDate date = LocalDate.parse(Integer.toString(dateAsInt), DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(date);