将 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);
我有一个长号格式:
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);