【发布时间】:2020-02-19 22:39:40
【问题描述】:
我有一个 Java (Spring) 类,其中一个变量是 Date 类型(称为 fnac,它存储生日,所以我不需要小时数!)
这些是他们的 set 和 get 方法:
public String getFnac() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setTimeZone(TimeZone.getTimeZone("UTC+2"));
return format.format(this.fnac);
}
public void setFnac(String fnac) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setTimeZone(TimeZone.getTimeZone("UTC+2"));
this.fnac = format.parse(fnac);
}
我决定使用 LocalDate,因为每个人似乎都说它更新更好,而且... 我想将 setter 和 getter 添加到 LocalDate
@Column(name = "FNAC")
private LocalDate fnac;
我已经尝试和搜索了几个小时,但我还无法将它添加到 LocalDate.. 这是我最后一次尝试:
public void setFnac(String fnac) throws ParseException {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
ZonedDateTime zdt = ZonedDateTime.parse(fnac, formatter.withZone(ZoneId.systemDefault()));
this.fnac = zdt.toLocalDate();
}
public String getFnac() {
Instant now = Instant.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
ZonedDateTime zdt = now.atZone(ZoneId.systemDefault());
return zdt.format(formatter).toString();
}
(我可能在二传手中有任何正确的内容,但是...很抱歉您必须阅读这样的灾难获取者...)
PD:是的,我有 LocalDate 坚持:https://thoughts-on-java.org/persist-localdate-localdatetime-jpa/
仅使用此代码,它将“成功”存储日期:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
但似乎我需要使用时区,因为...当我在数据库中保存日期时,它将保存前一天(因为它似乎在 00:00 UTC 使用 dd/mm/yyyy 保存+0),所以如果我将生日设置为 2015 年 7 月 10 日,它将保存 2015 年 6 月 10 日。 我什至不明白为什么 LocalDate 甚至可以节省一个小时。我使用 LocalDate 是有原因的,而不是 LocalDateTime。我只想要日期,但时代一直在追赶我!
我是 UTC+2(但我认为存储 UTC+2 没有意义,因为下周我们将是 UTC+1),所以我认为它将是 ZoneId.of("Europe/Madrid ") (我想它会在时区改变时自动改变小时)。
我希望你能帮助我! (对不起我的英语,它并不完美)。谢谢!
【问题讨论】:
-
你能显示你的示例输入字符串
String fnac -
而且您的数据库可能位于不同的时区
-
您是否考虑过将日期作为字符串以您想要的格式存储在数据库中。这样您就不必担心时区。
标签: java spring date java-time localdate