解析armydate长号到LocalDate

时间:2015-12-27 17:38:05

标签: java java-8 jodatime java-time

我的格式很长:
Long l = 20151228;

我想将它解析为LocalDate对象。

我该怎么做?

5 个答案:

答案 0 :(得分:5)

使用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

答案 1 :(得分:0)

执行此操作的一种方法是将long转换为String并使用SimpleDateFormat解析它:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

结果:

  

2015年12月28日

答案 4 :(得分:0)

我更喜欢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);