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