邮递员 JSON 响应中日期类型正在转换为时间戳,如何避免这种情况?

问题描述 投票:0回答:4
Java.util.Date
startDate : 2020-07-13 09:00:00.0

// JSON 响应

"startDate" : 1594611000000

我想以 JSON 显示为 2020-07-13 09:00:00.0

java json date datetime datetime-format
4个回答
0
投票

我建议您从过时且容易出错的

java.util
日期时间 API 切换到 现代日期-时间 API 并使用
DateTimeFormater#ofPattern
格式化给定的日期时间,如下所示:

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // Define format
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.S");

        // Get Instant from the time-stamp of 1594611000000
        Instant instant = Instant.ofEpochMilli(1594611000000L);

        // Get OffsetDateTime from instant
        OffsetDateTime odt = instant.atOffset(ZoneOffset.ofHoursMinutes(5, 30));

        // Get LocalDateTime from odt
        LocalDateTime ldt = odt.toLocalDateTime();

        // Get string in the defined format
        String dateTimeStr = formatter.format(ldt);

        // Display the formatted ldt
        System.out.println(dateTimeStr);
    }
}

输出:

2020-07-13 09:00:00.0

注意:

LocalDateTime
从中删除时区和时区偏移的重要信息。根据您的要求,从下面给出的列表中选择正确的日期时间对象:


0
投票

如果用于序列化/反序列化的 POJO 对象有一个 Date 字段,如下所示,则应将其通知用于序列化/反序列化的库(例如 Jackson )。

class JsonTest{
  private Date date;
}

执行序列化/反序列化时,数据格式的详细信息由Serializer/DeSerializer设置。使用 Jackson 的示例反序列化代码(使用 com.fasterxml.jackson.core)可以是

public static void main(String[] args) throws JsonProcessingException, ParseException 

{
        //2020-07-13 09:00:00.0
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
        String dateString = format.format( new Date()   );
        Date   date       = format.parse ( "2020-07-13 09:00:00.0" );
        JsonTest jsonTest = new JsonTest();
        jsonTest.setDate(date);
        ObjectMapper mapper = new ObjectMapper();

        //mapper should know that the  specific format is needed while conversion 
        mapper.setDateFormat(format);
        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        
        System.out.println(mapper.writeValueAsString(jsonTest));

    }

输出将打印为

{"date":"2020-07-13 09:00:00.0"}

0
投票

据我从您的问题中了解到,因此希望在响应正文中获取特定格式的日期。

在java中,您可以在DTO类中的字段上方添加@JsonFormat注释。 根据您的要求更改图案格式。

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date startDate;

-1
投票

您提到您的变量 startDate 是日期类型,现在我不知道您使用的是什么语言,但我可以尝试对您需要做什么进行有根据的猜测:

格式化日期类型以获得字符串类型,并将该字符串放入 JSON 中。作为一个字符串而不是时间戳的解释,不应该被转换。

© www.soinside.com 2019 - 2024. All rights reserved.