Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring Boot中正确格式化日期时间?_Java_Spring Boot_Datetime_Spring Mvc - Fatal编程技术网

Java 如何在Spring Boot中正确格式化日期时间?

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

我想知道如何正确设置日期和时间的格式?结果是Localdatetime yyyy MM ddTHH:MM

你能建议如何解决这个问题吗

我使用Java11,是因为@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;

因为您使用的是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?