我需要根据我的服务器时区在我的应用程序中设置时区。我在 IST= Asia/Kolkatta 的服务器时区。在 java8 中,时区可以直接在 @JsonFormat 中设置,如下所示:
@JsonCreator
public SystemDateResponseDTO (@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd",timezone = "CST") @JsonProperty("systemDate") final Date systemDate)
{
this.systemDate = systemDate;
}
我的 dto 类:
@Override
public SystemDateResponseDTO getCurrentSystemDate() {
Date systemDate = systemVariablesRepository.findOne(MIRUNTIME).getDate();
ZoneId zoneId = ZoneId.of(mset.getTimeZone());
LocalDateTime localtDateAndTime = LocalDateTime.now(zoneId);
ZonedDateTime dateAndTimeInSydney = ZonedDateTime.of(localtDateAndTime, zoneId );
if (RsWebUtil.isNotNull(systemDate)) {
return new SystemDateResponseDTO(systemDate, dateAndTimeInSydney);
} else {
throw new ProcessingException("System Date not Found");
}
}
这里是时区,我不想硬编码。所以我以这种方式从我的 *.properties 获取时区值:
@JsonCreator
public SystemDateResponseDTO(
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
@JsonProperty("systemDate") final Date systemDate,
@JsonProperty("timeZone") final ZonedDateTime timeZone) {
this.systemDate = systemDate;
this.timeZone = timeZone;
LOGGER.info("######****###Default timezone######****###" + timeZone);
}
我当前的系统日期是 07.02.2018,我的 postgres 数据库系统日期也是 07.02.2018。服务器时区是亚洲/加尔各答。
从 DTO,我得到了我发送的正确时区和日期。但是在查看应用程序时,日期实际上是前一天(06.02.2018)。我的时区没有被占用,还是在其他地方被覆盖?我正在使用 java 8、postgres DB 9.6.1 和 Jboss 6.3。我也尝试直接在我的独立设备中设置 JAVA_OPTS = "-Duser.timezone = IST" 。但没有变化。有人可以帮忙吗?
有什么方法可以将我的 timeZone 值直接分配给 @JsonFormat 时区类型?