如何在 Thymeleaf 中格式化日期

问题描述 投票:0回答:1
java spring spring-boot thymeleaf spring-thymeleaf
1个回答
0
投票

您的方法

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);

© www.soinside.com 2019 - 2024. All rights reserved.