我有一个来自API的日期格式,如下所示:
"start_time": "2015-10-1 3:00 PM GMT+1:00"
Run Code Online (Sandbox Code Playgroud)
这是YYYY-DD-MM HH:MM am/pm GMT时间戳.我将此值映射到POJO中的Date变量.显然,它显示转换错误.
我想知道两件事:
我在Spring Boot Application中格式化Java 8 LocalDateTime时遇到了一个小问题.使用"正常"日期我没有问题,但LocalDateTime字段转换为以下内容:
"startDate" : {
"year" : 2010,
"month" : "JANUARY",
"dayOfMonth" : 1,
"dayOfWeek" : "FRIDAY",
"dayOfYear" : 1,
"monthValue" : 1,
"hour" : 2,
"minute" : 2,
"second" : 0,
"nano" : 0,
"chronology" : {
"id" : "ISO",
"calendarType" : "iso8601"
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我想将其转换为:
"startDate": "2015-01-01"
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
public LocalDateTime getStartDate() {
return startDate;
}
Run Code Online (Sandbox Code Playgroud)
但是上述任何一个注释都不起作用,日期会像上面那样被格式化.建议欢迎!
我正在尝试遵循JDK8 java.time 是否有 jackson 数据类型模块中给出的解决方案?(这是这个问题的原因,而不是重复)。
我加了
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-modules-java8</artifactId>
<version>2.9.5</version>
<type>pom</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但我仍然无法做到这一点:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Run Code Online (Sandbox Code Playgroud)
该JavaTimeModule班是无处可寻。我究竟做错了什么?
我正在尝试调用一个休息端点,它返回一个 pojo 对象,如下所示:
public class Process {
@JsonProperty("id")
private String id = null;
@JsonProperty("processDefinitionId")
private String processDefinitionId = null;
@JsonProperty("businessKey")
private String businessKey = null;
@JsonProperty("startedAt")
private OffsetDateTime startedAt = null;
@JsonProperty("endedAt")
private OffsetDateTime endedAt = null;
@JsonProperty("durationInMs")
private Integer durationInMs = null;
@JsonProperty("startActivityDefinitionId")
private String startActivityDefinitionId = null;
@JsonProperty("endActivityDefinitionId")
private String endActivityDefinitionId = null;
@JsonProperty("startUserId")
private String startUserId = null;
@JsonProperty("deleteReason")
private String deleteReason = null;
//constructors and setters+getters
}
Run Code Online (Sandbox Code Playgroud)
这是调用:
ResponseEntity<Process> responseModel = restTemplate.exchange("http://localhost:8062/processes", HttpMethod.POST, httpEntity, Process.class);
Run Code Online (Sandbox Code Playgroud)
问题是我尝试了一些方法,例如忽略 …
我正在使用 ajava.sql.Date将日期字段存储在我的域对象之一中。该字段映射到 MySQLDATE列。当我尝试通过 Jackson 将此字段序列化为 JSON 时,Jackson 似乎没有考虑夏令时。
这是我的域对象中的字段的样子:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "EST")
private Date date;
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,Jackson 已被指示将时区解释为 EST。我的 MySQL 数据库也使用 EST 时区:
SHOW VARIABLES LIKE '%zone';
Output:
system_time_zone | EST
time_zone | SYSTEM
Run Code Online (Sandbox Code Playgroud)
我的问题是,对于夏令时开始和结束之间的日期,杰克逊返回的日期比数据库中存储的日期少一天。我假设这是因为杰克逊没有考虑夏令时。
我通过尝试在 Java 字段中将日期格式从 更改为yyyy-MM-dd来得出此结论。yyyy-MM-dd HH:mm:ss我注意到服务器返回了类似 的内容2017-03-13 00:00:00,但杰克逊将其序列化为2017-03-12 23:00:00(少一小时,这是 EST 时间受夏令时影响的时间)。
有什么办法可以克服这个问题吗?另外,java.sql.Date考虑到它没有时间对应项,使用的类型是否正确?我一直在考虑使用它java.time.LocalDate,但我还没有看到它是否会成功。
提前致谢!