Calendar cal= Calendar.getInstance();
System.out.println(cal.getTimeZone().getID());
cal.set(2012, 8, 21);
java.util.Date d = new java.util.Date();
System.out.println(d.toString());
//System.setProperty("user.timezone", "America/Chicago");
// System.out.println(TimeZone.getDefault().getID());
TimeZone tz1 = TimeZone.getTimeZone("Africa/Algiers");
//tz1.setDefault(tz1);
cal.setTimeZone(tz1);
System.out.println(cal.getTimeZone().getID());
//cal.set(2012, 8, 21);
System.out.println(d.toString());
输出是--
Asia/Calcutta
Tue Aug 21 11:35:06 IST 2012
Africa/Algiers
Tue Aug 21 11:35:06 IST 2012
我想要当前时区格式的时间,但它以 IST 格式给出。如何做到这一点。
最佳答案
编辑:我刚刚注意到您给出的代码甚至没有调用cal.getTime()
。您完全忽略日历中的值。无论如何,它不会执行您想要的操作,但您要打印的值只是 new Date()
...您希望日历如何参与其中?
I want the time in the currrent timezone format but it is giving in IST. How to do this.
首先避免使用Date.toString
。 Date
值没有时区的概念,因此 toString
始终仅使用系统时区。更改日历的时区而不再次调用 set
也不会更改基础值。
现在有两个选择:
- 使用
SimpleDateFormat
,在格式化之前指定时区 - 使用Joda Time相反,它首先是一个更丰富的日期和时间 API
我个人强烈建议您使用后一个选项,特别是当您进行大量日期/时间操作时。 Date
、Calendar
和 SimpleDateFormat
只是不允许您编写能够清楚表达您在任何时间点拥有的数据的代码。
关于java - 时区转换和日期显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12049196/