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