[英]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;
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.