将日历转换为java.util.Date的问题

Cal*_*leb 2 java calendar date

我需要使用澳大利亚时区创建一个java.util.Date对象.下游组件中使用的标记库需要此对象(因此我坚持使用Date).

这是我尝试过的:

TimeZone timeZone = TimeZone.getTimeZone("Australia/Sydney");
GregorianCalendar defaultDate = new GregorianCalendar(timeZone);
Date date = defaultDate.getTime();
Run Code Online (Sandbox Code Playgroud)

但是,"date"始终返回当前本地时间(在我的情况下,ET).我在这做错了什么?甚至可以使用不同的时区设置Date对象吗?

更新:

谢谢你的回复!如果我想将格式化的日期输出为字符串,则此方法有效,但如果我想返回日期对象则不行.例如:

Date d = new Date();
DateFormat df = new SimpleDateFormat();
df.setTimeZone(TimeZone.getTimeZone("Australia/Sydney"));

String formattedDate = df.format(d);   // returns Sydney date/time
Date myDate = df.parse(formattedDate); // returns local time(ET)
Run Code Online (Sandbox Code Playgroud)

我想我最终会重新修改我们的日期taglib.

Bal*_*usC 5

甚至可以使用不同的时区设置Date对象吗?

不,这是不可能的.正如其javadoc描述的那样,所有java.util.Date包含的只是纪元时间,它始终是相对于1970年1月1日UTC/GMT的秒数.在Date不包含其他信息.要使用时区格式化,请使用SimpleDateFormat#setTimeZone()