SpringBoot 日期转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iuie_sl/article/details/82385490

SpringBoot 日期转换

前提:
    请求参数里面的string转化为date和使用@RequestBody请求将json里面的string转化为date这是两个问题。

1. 传入参数时string转换为Date
2. 返回值时date转换为string


对于请求参数里面string转化为date使用了全局的转换器可以解决问题,但是对于@RequestBody这种提交的不起作用```java

@Component
public class StringToDateConverter implements Converter<String, Date> {

    private static final String dateFormat = "MM/dd/YYYY hh:mm:ss a";

    @Override
    public Date convert(String value) {
        SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);
        try {
            return formatter.parse(value);
        } catch (Exception e) {
            throw new RuntimeException(String.format("parser %s to Date fail", value));
        }
    }
}


  局部转换

@DatetimeFormat是将String转换成Date,一般前台给后台传值时用,实践不可用。
@JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")  将Date转换成String  一般后台传值给前台时,前台传值给后台也可以


另一种方式的局部转换,使用@JsonDeserialize和@JsonSerialize

@Component
public class DateJsonDeserializer extends JsonDeserializer<Date> {

    public static final SimpleDateFormat format=new SimpleDateFormat("MM/dd/YYYY");


    @Override
    public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        try {
            return format.parse(jsonParser.getText());
        } catch (ParseException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}

使用

@JsonDeserialize(using = DateJsonDeserializer.class)
private Date anticipatedStartedDate;

参考:
https://blog.csdn.net/walkcode/article/details/78956559

全局转换对于输入输出都起作用,这是最好的方式,对于请求参数和json,输入输出都起作用

spring:
    jackson:
        date-format: MM/dd/YYYY HH:mm:ss
        time-zone: GMT+8

hh为12小时制, HH为24小时制。使用24小时制的要把时区加上,不然会和本地时间相差8小时。如果改为MM/dd/yyyy HH:mm:ss,不加时区也是正常的。
注意: 日期这个是完全匹配的,如果你传MM/dd/YYYY是要报错的,必须加上后面的HH:mm:ss a

猜你喜欢

转载自blog.csdn.net/iuie_sl/article/details/82385490