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

时间:2010-11-09 02:11:49

标签: java date calendar

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

以下是我的尝试:

TimeZone timeZone = TimeZone.getTimeZone("Australia/Sydney");
GregorianCalendar defaultDate = new GregorianCalendar(timeZone);
Date date = defaultDate.getTime();

但是,“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)

我想我最终会重新修改日期标记库。

2 个答案:

答案 0 :(得分:5)

  

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

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

答案 1 :(得分:1)

getTime是一个Unix时间,以秒为单位,它没有时区,即它与UTC绑定。您需要将该时间转换为您想要的时区e.b.使用DateFormat。

import java.util.*;
import java.text.*;

public class TzPrb {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println(d);

        DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        df.setTimeZone(TimeZone.getTimeZone("Australia/Sydney"));
        System.out.println(df.format(d));
        df.setTimeZone(TimeZone.getTimeZone("Europe/London"));
        System.out.println(df.format(d));
    }
}