将当前时区设置为@JsonFormat时区值

时间:2017-09-02 07:57:19

标签: java json timezone spring-data-jpa dto

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = "Asia/Kolkata")
private Date activationDate;

嗨,大家好,

从上面的java代码中,我想使用下面的方法将时区值设置为当前系统时区   TimeZone.getDefault()。getID() - 它返回值“Asia / Kolkata”

但是,如果我将此代码设置为json格式

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = TimeZone.getDefault().getID())

我收到错误,如“注释属性JsonFormat.timezone的值必须是常量表达式”

请帮助我解决这个问题。

提前致谢, 毗

3 个答案:

答案 0 :(得分:3)

您可以使用JsonFormat.DEFAULT_TIMEZONE

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = JsonFormat.DEFAULT_TIMEZONE)

从文档中

  

特殊值DEFAULT_TIMEZONE可用于表示“只使用默认值”,其中默认值由序列化上下文指定,而序列化上下文又默认为系统默认值(TimeZone.getDefault()),除非明确设置为另一个语言环境。

答案 1 :(得分:1)

您无法将 timezone 值指定为动态值或运行时值。它应该是常量或编译时间值,并且枚举也被接受。

因此,您应该为时区分配一个常量。如下。

private static final String MY_TIME_ZONE="Asia/Kolkata";
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = MY_TIME_ZONE);

答案 2 :(得分:0)

您可以使用枚举来丰富您将使用的时区。使用枚举的解决方案是以下枚举类实现。

    package <your package goes here>;

    import java.util.TimeZone;


    public enum TimeZoneEnum {

        DEFAULT(TimeZone.getDefault()),
        ASIA_KOLKATA = (TimeZone.getTimeZone("Africa/Abidjan")),
        //other timezones you maybe need
        ...


    private final TimeZone tz;

        private TimeZoneEnum(final TimeZone tz)
        {
            this.tz = tz;
        }

        public final TimeZone getTimeZone()
        {
            return tz;
        }
    }

然后你可以使用如下的枚举:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = TimeZoneEnum.ASIA_KOLKATA )