У меня был класс на Java (Spring), и одной из переменных был тип Date (называемый fnac, в котором хранится дата рождения, поэтому мне не нужны часы!)
Это были их набор и получениеметоды:
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, так как все, кажется, говорят, что он новее и лучше, и ... Я хотел бы добавить сеттер и геттер в 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");
Но, похоже, мне нужно работать с часовыми поясами, потому что... когда я сохраняю дату в базе данных, она сохраняет предыдущий день (потому что кажется, что она сохраняется с помощью dd / mm / yyyy в 00:00 UTC+0), поэтому, если я назначу дату рождения 07.10.2015, она сохранится 10.06.2015. Я даже не понимаю, почему LocalDate даже экономит час. Я использую LocalDate по причине, а не LocalDateTime. Я только хочу Даты, но время преследует меня!
Я UTC + 2 (но я думаю, что не имеет смысла хранить UTC + 2, потому что на следующей неделе мы будем UTC + 1), поэтому я думаю, что это будет ZoneId.of ("Европа / Мадрид ") (я полагаю, что при смене часовых поясов час будет меняться автоматически).
Надеюсь, вы мне поможете! (Извините за мой английский, он не идеален). Спасибо!