0

我需要根据我的服务器时区在我的应用程序中设置时区。我在 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 时区类型?

4

0 回答 0