将时代从日期转换为日期

时间:2018-08-06 13:38:24

标签: java epoch

我想将自纪元以来的天数转换为日期。假设我有以下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?

2 个答案:

答案 0 :(得分:3)

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

  • 静态方法ofEpochDay

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

    LocalDate.EPOCH.plusDays(17749);
    

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

答案 1 :(得分:2)

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和方便的EPOCH静态:

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

(啊,我错过了ofEpochDay,请参阅azro's answer。)