用org.json库格式化localdatetime时出现问题

bfrts1fy  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(483)

我对使用 org.json 图书馆。
在我的代码中,我有:

String resultStr = new JSONObject(result).toString();

在result object中有两个类型为 LocalDateTime :

private LocalDateTime startDate;
private LocalDateTime stopDate;

在变量中 resultStr 我的日期格式如下:

2020-01-23T14:13:30.121205

我想要这个iso格式:

2016-07-14T07:58:08.158Z

我知道在Jackson身上有一个注解 @JsonFormat ,但我没有发现类似的东西 org.json . 如何定义 LocalDateTime 在json字符串中 org.json ?

oewdyzsn

oewdyzsn1#

在java的json中,似乎不太支持日期/时间格式。
自定义的格式 LocalDateTime 我们可以利用

  1. @jsonpropertyignore忽略要序列化的原始getter
  2. @jsonpropertyname,用于注解具有忽略字段名的新getter,该字段返回所需的格式化日期字符串,如下所示:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import org.json.JSONObject;
import org.json.JSONPropertyIgnore;
import org.json.JSONPropertyName;

public class CustomizeLocalDateTimeFormatInOrgJson {
    public static void main(String[] args) {
        Result result = new Result(LocalDateTime.now(), LocalDateTime.now());
        String resultStr = new JSONObject(result).toString();
        System.out.println(resultStr);
    }

    public static class Result {
        DateTimeFormatter customDateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssS'Z'");
        private LocalDateTime startDate;

        @JSONPropertyIgnore
        public LocalDateTime getStartDate() {
            return startDate;
        }

        @JSONPropertyName("startDate")
        public String getStartDateString() {
            return customDateTimeFormat.format(startDate);
        }

        private LocalDateTime stopDate;

        @JSONPropertyIgnore
        public LocalDateTime getStopDate() {
            return stopDate;
        }

        @JSONPropertyName("stopDate")
        public String getStopDateString() {
            return customDateTimeFormat.format(stopDate);
        }

        public void setStopDate(LocalDateTime stopDate) {
            this.stopDate = stopDate;
        }

        public void setStartDate(LocalDateTime startDate) {
            this.startDate = startDate;
        }

        public Result(LocalDateTime startDate, LocalDateTime stopDate) {
            super();
            this.startDate = startDate;
            this.stopDate = stopDate;
        }
    }
}

相关问题