簡體   English   中英

如何在 Spring Boot 中正確格式化日期時間?

[英]How to format the date time correctly in Spring Boot?

我想知道如何正確格式化日期時間? 結果是 Localdatetime yyyy-MM-ddTHH:mm。

你能建議如何解決嗎?

我使用的是 Java 11,是不是因為 @JsonFormat 不支持 @RequestParam?

Controller:

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

由於您使用的是 Spring-boot,我還假設您使用的是 java8。 在任何情況下,嘗試使用 java8 時間 api 作為日期,如:

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

如果您使用的是在 java8 之前發布的JPA 2.1 ,那么在您的實體 class 中,您可以使用轉換器將其轉換為 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 中,上述轉換將自動執行,不需要您提供上述方法。

如果您的要求只是通過實體 class 以特定格式保留從@RequestParam讀取的日期,則始終可以在將值設置為實體 class 之前手動將其轉換為您可以選擇的任何格式,例如:

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

}

在您的 model class 中使用此代碼:

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

並創建此 class 映射器:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM