将天数从纪元转换为日期

Convert days from epoch to date

我想将纪元以来的天数转换为日期。假设我有以下 Timestamp in days: 17749 那么它应该被转换为 Monday Aug 06 2018.

我正在尝试使用以下代码:

Date date = new SimpleDateFormat("D").parse(String.valueOf("17749"));
System.out.println(date);

但我得到 Sun Aug 05 00:00:00 PKT 2018。日期比正常日期早一天,如何将其转换为 yyyy-mm-dd?

SimpleDateFormat pattern 中的

D 的日子,而不是大纪元以来的日子。

最简单的大概就是乘以一天的毫秒数(86400000 = 24 * 60 * 60 * 1000)然后使用 new Date(milliseconds):

long days = 17749;
Date d = new Date(days * 86400000L);

不过,旧的 java.util.Date 是一个失败的 API。例如,您可能会查看 java.time.LocalDate(或另一个 java.time 类),其中有 plusDays and a handy EPOCH static:

// ACTUALLY, THERE'S A BETTER WAY THAN THIS, SEE LINK AFTER CODE BLOCK
long days = 17749;
LocalDate d = LocalDate.EPOCH.plusDays(days);

(啊,我错过了ofEpochDay, see 。)

使用最新的 API java.time 你可以使用:

  • 静态方法ofEpochDay:

    LocalDate d = LocalDate.ofEpochDay(17749);
    System.out.println(d);                       // 2018-08-06
    
  • 静态常量EPOCH :

    LocalDate.EPOCH.plusDays(17749);
    

然后对于输出,它只有 String,因此您可以使用内置格式化程序或创建您自己的格式化程序:DateTimeFormatter