【发布时间】:2017-03-31 08:15:32
【问题描述】:
我正在尝试反序列化 Date 对象并设置本地时区。我从 UTC 的服务器获取日期,并且我的网站托管在同一时区,但是当我从服务器和我的网站收到时区的日期时。但是,客户端可以在另一个时区,所以我需要在客户端时区设置时间。为了更改时区,我在之前的请求中将它保存在会话中,但是当我要反序列化它时,会话为空。
我在一个对象中有一个日期参数
public class WorkDay implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
@JsonDeserialize(using = CustomJsonDateDeserializer.class)
private Date date;
然后,我的反序列化方法
public class CustomJsonDateDeserializer extends JsonDeserializer<Date>
{
@Autowired
private HttpSession session;
@Override
public Date deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException, JsonProcessingException {
String dateString = jsonparser.getText();
@SuppressWarnings("resource")
long createdate = new Scanner(dateString).useDelimiter("[^0-9]+").nextLong();
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(createdate);
TimeZone tz = (TimeZone)session.getAttribute("timezone");
cal.setTimeZone(tz);
return cal.getTime();
}
}
我在会话中保存了时区
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String home(TimeZone timezone, Model model) {
UserAuth user = (UserAuth)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if(user!= null)
{
try{
session.setAttribute("timezone", timezone);
我在上一个请求中保存在会话中的时区之前,但在这个类中,会话为空。有什么方法可以从这个类的会话中获取数据吗?
谢谢!
【问题讨论】:
-
目前还不清楚您想要实现什么 -
Date没有有时区。它代表一个时间点——仅此而已。 -
仍不清楚。听起来您现在实际上是在询问会话管理,这与日期反序列化无关。
-
我正在尝试从会话中的反序列化类中获取时区。我正在尝试访问会话,因为我之前保存了它。但也许还有另一种方法可以恢复本地时区
-
您似乎仍然错过了我的初始点:
Date值没有时区。它根本不是“在”特定时区。您的cal操作基本上什么都不做。你可以使用new Date(createdate)。现在您可以决定在特定时区渲染Date- 但这是另一回事,反序列化部分与它完全无关。 -
啊,好吧,我明白了。谢谢
标签: java json spring date json-deserialization