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() ...您如何期望日历参与其中?


我想要的时间为当前时区格式,但以IST给出。这个怎么做。


首先避免使用Date.toStringDate值没有时区的概念,因此toString始终始终使用系统时区。更改日历的时区而不再次调用set也不更改基础值。

现在有两个选择:


使用SimpleDateFormat,在格式化之前在其中指定时区
请改用Joda Time,这首先是一个更丰富的日期和时间API


我个人强烈建议您使用后一种选项,尤其是在您要进行大量日期/时间操作的情况下。 DateCalendarSimpleDateFormat只是不允许您编写清楚地表示您在任何时间点拥有哪些数据的代码。

10-04 23:06
查看更多