我试图产生从LocalDate
对象(java.time.LocalDate
),其中我有以下条件的Date
对象(java.util.Date
):LOCALDATE不一致
- 允许可从减去一定天数的一个参数
Date
对象 - 将日期&时间是在一天的开始
- 有时间日期和当前UTC时间,即
00:00:00
- 时区印章(即CDT或UTC)是无关紧要的,因为我删除从
String
为了达到这个标准,我创建了一个测试程序,但我得到有趣的结果,当我修改LocalDate
的某些财产。请参见下面的代码:
public static void main (String args[]) {
Long processingDaysInPast = 0L;
LocalDate createdDate1 = LocalDate.now(Clock.systemUTC()).minusDays(processingDaysInPast);
LocalDate createdDate2 = LocalDate.now(Clock.systemUTC()).minusDays(processingDaysInPast);
System.out.println(createdDate1);
System.out.println(createdDate1.atStartOfDay().toInstant(ZoneOffset.UTC));
System.out.println(Date.from(createdDate1.atStartOfDay().toInstant(ZoneOffset.UTC)));
System.out.println((createdDate2.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()));
System.out.println(Date.from(createdDate2.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()));
}
输出:
2017-08-14
2017-08-14T00:00:00Z
Sun Aug 13 19:00:00 CDT 2017
2017-08-14
2017-08-14T05:00:00Z
Mon Aug 14 00:00:00 CDT 2017
当我添加值Date.from(createdDate1.atStartOfDay().toInstant(ZoneOffset.UTC))
我得到的日期的预期输出,具有00:00:00
时间字段。但是,如果我不加这个参数,如:Date.from(createdDate2.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())
我得到所产生的前一天,在19:00:00
这是为什么?
我的主要目标是能够捕获一个Date
对象,当前UTC日期和时间归零(StartOfDay
)。
主要是因为时区不是不相关的 - 在UTC和CDT中的相同日期时间等于不同的Instants(即从纪元秒)。 –
当前时区的一天的开始时间与UTC的一天的开始时间不同。这就是你所看到的。 –