我之前问过this问题,但我仍然不确定如何解决我的问题。我希望找到设置用户时区的最佳方法,然后在用户时区(而不是服务器本地时区)中提取日期。一些代码将澄清...(注意:此代码是我的问题的简化)
long t = 1436842840327L;
Calendar c = Calendar.getInstance();
c.setTimeInMillis(t);
c.setTimeZone(TimeZone.getTimeZone("US/Alaska"));
System.out.println(c.getTime());
System.out.println(c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.MILLISECOND));
输出
Mon Jul 13 23:00:40 EDT 2015
19:0:327 //<--- why is hour not 23???
但我希望它输出
Mon Jul 13 23:00:40 EDT 2015
23:0:327
我有一个基于Web用户本地时间提供Calendar对象的Web服务。然后我需要在服务器端处理这个Calendar对象,所以我必须在数据库中查找用户时区,设置它然后在查询数据库时提取小时使用。最终发生的是Calendar.DAY_OF_MONTH和Calendar.HOUR与Calendar对象表示的日期不匹配。总而言之,我希望用户提供一个Calendar对象,设置时区,然后提取正确的小时和天。
答案 0 :(得分:2)
因为必须使用Calendar#toString
或Date#toString
来获取日期的字符串表示形式。相反,请使用SimpleDateFormat
。
Date yourDate = ...
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("US/Alaska"));
System.out.println(sdf.format(yourDate));