Как правильно отформатировать дату и время в Spring Boot? - PullRequest
0 голосов
/ 06 августа 2020

Я хотел бы знать, как правильно форматировать дату и время? Результат: Localdatetime yyyy-MM-ddTHH: mm.

Не могли бы вы посоветовать, как решить?

Я использую Java 11, и делает это потому, что @JsonFormat не поддерживает @RequestParam ?

Контроллер:

@PostMapping("/checkFollowupDate")
public LocalDateTime updateCaseFollowup(@RequestParam("followupDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") LocalDateTime followupDate) {
 return followupDate;
}

Сущность:

@Entity
@Table(name = "caseFollowup")
public class CaseFollowup {
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss.SSS")
    private LocalDateTime followupDate;

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Поскольку вы используете Spring-boot, я также предполагаю, что вы используете java8. В любом случае попробуйте использовать api времени java8 для даты, например:

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime followupDate;

, и если вы используете JPA 2.1 , который был выпущен до java8, тогда в вашем классе сущности у вас может быть преобразователь в преобразуйте его для sql отметки времени, например:

@Converter(autoApply = true)
public class LocalDateTimeAttributeConverter implements AttributeConverter<LocalDateTime, Timestamp> {
     
    @Override
    public Timestamp convertToDatabaseColumn(LocalDateTime locDateTime) {
        return locDateTime == null ? null : Timestamp.valueOf(locDateTime);
    }
 
    @Override
    public LocalDateTime convertToEntityAttribute(Timestamp sqlTimestamp) {
        return sqlTimestamp == null ? null : sqlTimestamp.toLocalDateTime();
    }
}

Помните, что в более новой версии Hibernate (Hibernate 5) и JPA вышеуказанное преобразование будет выполнено автоматически и не требует от вас предоставления вышеуказанного метода.

Если ваше требование состоит в том, чтобы просто сохранить дату, прочитанную из @RequestParam через класс сущности в определенном формате, вы всегда можете преобразовать ее вручную в любой формат, который вы можете выбрать, прежде чем устанавливать значение в свою сущность. как класс:

@PostMapping("/caseFollowup")
    public Integer updateCaseFollowup(@RequestParam("followupDate")
                                       LocalDateTime followupDate) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatDateTime = followupDate.format(formatter);

}
0 голосов
/ 06 августа 2020

используйте этот код в своем классе модели:

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssZ", shape = JsonFormat.Shape.STRING)
        private OffsetDateTime lastModifiedDate;

и создайте этот сопоставитель классов:

import java.sql.Timestamp;
        import java.time.OffsetDateTime;
        import java.time.ZoneOffset;
        @Component
        public class DateMapper {
        
            public OffsetDateTime asOffsetDateTime(Timestamp ts){
                if (ts != null){
                    return OffsetDateTime.of(ts.toLocalDateTime().getYear(), ts.toLocalDateTime().getMonthValue(),
                            ts.toLocalDateTime().getDayOfMonth(), ts.toLocalDateTime().getHour(), ts.toLocalDateTime().getMinute(),
                            ts.toLocalDateTime().getSecond(), ts.toLocalDateTime().getNano(), ZoneOffset.UTC);
                } else {
                    return null;
                }
            }
        
            public Timestamp asTimestamp(OffsetDateTime offsetDateTime){
                if(offsetDateTime != null) {
                    return Timestamp.valueOf(offsetDateTime.atZoneSameInstant(ZoneOffset.UTC).toLocalDateTime());
                } else {
                    return null;
                }
            }
        }
...