您的方法
item.getCreatedDate()
返回一个Instant
。
这意味着一些事情:
LocalDate
,那么这个名字就可以了。日期不是时间戳。返回哪种时间概念的混乱是有害的:许多地方允许在实际上无法隐式转换的类型之间进行隐式转换,从而导致错误。您在测试中找不到的错误类型,因为它们只发生在时区或夏令时不匹配的情况下。Instant
,因为你不应该这样做:瞬间是时间中的一个时刻,正如宇宙所测量的那样:它并不意味着代表、交互或适合任何基于人类的操作时间计算(天/月/年/小时/时区:这是人类计算。“自纪元以来的毫秒”,这是计算机计算)。例如,Instant 根本不编码时区。他们只是及时编码一个时刻。因此,用人类的语言来呈现它“不可能”!为此,您必须首先有一个时区; “那个瞬间是哪一个月?”无法回答。只有这样的问题:“阿姆斯特丹……的那个瞬间是哪一个月?” ——这个可以回答。您必须为其指定一个时区才能完成其工作 - 您可以通过 将您的 Instant 转换为例如一个ZonedDateTime
。does包含以人类计算术语呈现它所需的所有信息,并且事实上,时间的
format
可以处理ZDT(或LocalDateTime
实例,您的选择)就好。
getCreatedDate()
方法以返回更适合该作业的内容,或者使用以下方法将其返回的 Instant 转换为 ZDT:
.getCreatedInstant().atZone(ZoneId.of("Europe/Amsterdam"));
// or
.getCreatedInstant().atZone(ZoneOffset.UTC);