当前位置: 首页 > 知识库问答 >
问题:

无法转换日期-LocalDate减去一天

鲜于璞瑜
2023-03-14

我对日期及其从日期到LocalDate的转换有问题,主要错误在于1700年的日期。我试过两个不同的日期,每当1700年的时候,我就少了一天。

Date dto = ...;
Instant inst = dto.toInstant();         
LocalDate localDate = LocalDate.ofInstant(inst, ZoneId.systemDefault());

date dto它是一个检索查询日期的变量。但是该方法只获取dto变量作为输入参数。

Tue Dec 14 00:00:00 CET 1700 -> Date
1700-12-13T23:00:00Z -> Instant
1700-12-13 -> LocalDate

Sat Jan 01 00:00:00 CET 1994 -> Date
1993-12-31T23:00:00Z -> Instant
1994-01-01 -> LocalDate

我使用:

jackson.time-zone: ${TZ:Europe/Madrid}

今年有什么问题?

共有1个答案

燕烨
2023-03-14

这是因为无论是谁制作了日期和分区ID。systemDefault()早在1700年,对马德里与UTC的偏移量有不同的看法。

制作该日期的人错误地认为马德里在1700年12月14日是UTC 1,因此它制作了一个日期,代表UTC 1区(“CET”)1700年12月14日的午夜:

Tue Dec 14 00:00:00 CET 1700

这有一个相应的瞬间,因为我们可以使用此信息精确定位某个时间点。这是toInstant提供给您的<代码>即时。toString始终以UTC(更具体地说是ISO 8601)显示,因此您可以看到:

1700-12-13T23:00:00Z

1700-12-14T00:00:00 01:00确实与1700-12-13T23:00:00Z相同的时间点。

当您执行LocalDate时。在瞬间,您可以使用ZoneId。systemDefault()<代码>分区ID。systemDefault()认为马德里有UTC-0:14:44的偏移量。这是因为马德里一直遵守当地的平均时间,直到20世纪才将时区标准化。

因此,LocalDate.ofInstant从1700-12-13T23:00:00减去14分44秒来计算偏移量-0:14:44的日期,瞧,它仍然是1700-12-13。

如果可能的话,我建议您不要使用日期。如果你所做的与时间有关,那么你应该直接使用LocalDate。

 类似资料:
  • 我想知道在FreeMarker中从今天的日期减去日期的最好方法是什么? 我有一个用户的注册日期在这种格式:2015-06-15 05:12:35.890,我要做的是得到他们注册到现在之间的年数。(全年,不需要1年6个月/1.5年为例) 谁能告诉我做这件事的最好方法吗?

  • 问题内容: 我有一个这样的日期: 如何返回同一日期但比一年前早的日期? 问题答案: 您可以使用: 该函数返回unix时间戳,可以使用以下格式的字符串:

  • 我JasperReport中有这样的代码,就像< code > new simple date format(" DD/MM/yyyy ")。format(new Date())-24 * 3600 * 1000 但是它不起作用,我正在尝试从今天开始减去一天。但它是这样显示今天的

  • 问题内容: 我有一个对象。减去一天的最佳方法是什么? 问题答案: 你可以使用对象:

  • 问题内容: 我使用Java 8 LocalDate和Period类来添加和删除年,月和日。为什么在某些情况下,如果将Period添加到日期并删除相同的时间,则Java 8返回另一个日期? 为什么结果是2023-01-31而不是2023-01-30 问题答案: 为什么在某些情况下,如果将Period添加到日期并删除合理的时间,则Java 8返回另一个日期? 因为这就是日历计算的原理-几个月的长度是不