我正在开展一个项目,我必须操纵日期。这是我的代码片段 我的时区是IST,转换时区是CST。
public class Sample {
public static Long time = 1418187600l;
public static TimeZone tz1 = TimeZone.getTimeZone("US/Central");
public static void main(String[] args) {
Calendar c1 = Calendar.getInstance();
System.out.println(c1.getTime()); // output1
c1.setTimeInMillis(time*1000);
System.out.println(c1.getTime());//output 2
System.out.println(c1.get(Calendar.DATE));
c1.setTimeZone(tz1);;
System.out.println(c1.getTime()); //output 3
System.out.println(c1.get(Calendar.DATE));
}
}
当我运行该程序时,我得到了
Wed Dec 10 13:03:42 IST 2014
对于正确的行。
然后将时间设置为1418187600,此输出也正确。
Wed Dec 10 10:30:00 IST 2014
但是当将时区设置为CST并尝试输出日期时,它返回相同的
Wed Dec 10 10:30:00 IST 2014
虽然应该已经 2014年12月9日23:00:00 。
然而,当我尝试Calendar.data时,它显示了正确的日期。任何人都可以向我解释为什么会这样吗?
答案 0 :(得分:2)
您正在打印java.util.Date
(调用getTime()
的结果)。 Date
根本不包含时区信息 - Date.toString()
始终显示默认时区中Date
所代表的时间点。
基本上,你应该避免打电话给Date.toString()
- 这是造成很多混乱的原因。请改用SimpleDateFormat
,您可以将其设置为使用特定时区。
或者,如果您使用的是Java 8,则使用java.time
类,否则使用Joda Time - 两者都是 更好的选项而不是java.util.Date
和{{ 1}}。