Java 如何在Spring Boot中正确格式化日期时间?
我想知道如何正确设置日期和时间的格式?结果是Localdatetime yyyy MM ddTHH:MM 你能建议如何解决这个问题吗 我使用Java11,是因为@JsonFormat不支持@RequestParam吗 控制器:Java 如何在Spring Boot中正确格式化日期时间?,java,spring-boot,datetime,spring-mvc,Java,Spring Boot,Datetime,Spring Mvc,我想知道如何正确设置日期和时间的格式?结果是Localdatetime yyyy MM ddTHH:MM 你能建议如何解决这个问题吗 我使用Java11,是因为@JsonFormat不支持@RequestParam吗 控制器: @PostMapping("/checkFollowupDate") public LocalDateTime updateCaseFollowup(@RequestParam("followupDate") @DateTimeFo
@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;
因为您使用的是SpringBoot,所以我还假设您使用的是java8。在任何情况下,请尝试对日期使用java8时间api,如:
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime followupDate;
如果您使用的是java8之前发布的JPA2.1,那么在实体类中,您可以使用一个转换器将其转换为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();
}
}
因为您使用的是SpringBoot,所以我还假设您使用的是java8。在任何情况下,请尝试对日期使用java8时间api,如:
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime followupDate;
如果您使用的是java8之前发布的JPA2.1,那么在实体类中,您可以使用一个转换器将其转换为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();
}
}
在模型类中使用以下代码:
并创建此类映射器:
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;
}
}
}
在模型类中使用以下代码:
并创建此类映射器:
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;
}
}
}
但是它仍然显示日期格式,如“Thu Aug 06 09:01:00 CST 2020”。Where?@AlanHay当我在调试中检查日期格式时:public case followup(date followupDate){this.followupDate=followupDate;日期以字符串形式显示。停止使用
java.util.date
并切换到java.time
…这是日期通过其toString()的内部表示形式方法。您可以使用或其他任何方式对其进行格式化以供显示。此外,@JsonFormat
不会对@RequestParam
@AlanHay产生任何影响。谢谢,我如何将LocalDateTime对象从RequestParam解析为“yyy-MM-dd HH:MM:ss.SSS”格式到存储库?但是它仍然显示日期格式,如“Thu Aug 06 09:01:00 CST 2020”。当我在调试中检查日期格式时,在哪里?@AlanHay:public case followup(日期followupDate){this.followupDate=followupDate;日期以字符串形式显示。停止使用java.util.date
并切换到java.time
…这是通过其toString()的日期的内部表示形式方法。您可以使用或其他任何方式对其进行格式化以供显示。此外,@JsonFormat
不会对@RequestParam
@AlanHay产生任何影响。谢谢,我如何将LocalDateTime对象从RequestParam解析为“yyy-MM-dd HH:MM:ss.SSS”格式到存储库?谢谢!如何在控制器中更新?它仍然使用LocalDateTime接收参数还是使用OffsetDateTime?谢谢!如何在控制器中更新?它仍然使用LocalDateTime接收参数还是使用OffsetDateTime?