Java TimeZone.getDefault()属性值必须为常量错误
我正在尝试将时区设置为系统默认值 我在Java TimeZone.getDefault()属性值必须为常量错误,java,json,spring,timezone,Java,Json,Spring,Timezone,我正在尝试将时区设置为系统默认值 我在BatchDateUtils.java类中有一个String变量: public static final String DEFAULT_TIMEZONE = TimeZone.getDefault().toString(); 我努力实现的目标是: @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = BatchD
BatchDateUtils.java
类中有一个String
变量:
public static final String DEFAULT_TIMEZONE = TimeZone.getDefault().toString();
我努力实现的目标是:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = BatchDateUtils.DEFAULT_TIMEZONE)
private Date reportDateFrom;
我得到:
Attribute value must be constant
一般来说,我知道错误是什么,但我如何解决它呢?谢谢 如果要在注释中设置值,必须定义一个常量值,例如
“Europe/London”
依赖于JVM配置的东西不是常数;但更一般地说,任何使用方法结果的东西都不是常数
此外,依赖默认时区很少是一个好主意,因为它可以在运行时更改,很容易被错误配置等。如果要在注释中设置值,必须定义一个常量值,例如
“Europe/London”
依赖于JVM配置的东西不是常数;但更一般地说,任何使用方法结果的东西都不是常数
此外,依赖默认时区很少是一个好主意,因为它可以在运行时更改,很容易被错误配置等等。@AndyTurner这正是我现在要避免的。我不想硬编码时区。还有其他可能性吗?是的,手动定义转换,而不是使用必须是完全常量的注释(比如仍然会有注释,但引用一个类来执行转换,该类将由您创建,并确定运行时要应用的时区)@kumesana您能给我一些详细信息吗,我真的不明白,我建议您不要使用
时区
和其他旧的数据和时间类。那门课设计得很糟糕,而且早已过时。而是使用ZoneId.systmDefault().toString()和来自的其他功能。正如安迪·特纳(Andy Turner)在回答中所说,依赖默认时区是脆弱的,因为它可能不是恒定的。@Andy Turner这正是我现在正在避免的。我不想硬编码时区。还有其他可能性吗?是的,手动定义转换,而不是使用必须是完全常量的注释(比如仍然会有注释,但引用一个类来执行转换,该类将由您创建,并确定运行时要应用的时区)@kumesana您能给我一些详细信息吗,我真的不明白,我建议您不要使用时区
和其他旧的数据和时间类。那门课设计得很糟糕,而且早已过时。而是使用ZoneId.systmDefault().toString()和来自的其他功能。正如安迪·特纳在回答中所说,依赖默认时区是脆弱的,因为它可能不是恒定的。