2010-11-09 96 views
2

我需要创建一个具有澳大利亚时区的java.util.Date对象。这个对象是在下游组件中使用的标签库所必需的(所以我被Date卡住了)。将日历转换为java.util.Date的问题

这是我尝试:

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

然而, “日期” 总是返回当前的本地时间(在我的情况,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) 

我想我最终将会重新调整我们最新的taglib。

+0

[如何使用Java来处理日历时区?(http://stackoverflow.com/questions/230126/how-to-handle-calendar-timezones-using-java) – duffymo 2010-11-09 02:17:01

回答

4

它甚至可以设置一个不同的时区的日期对象?

不,这是不可能的。如其javadoc所述,所有java.util.Date包含的仅仅是相对于UTC/GMT1970年1月1日的时间量的历元时间。 Date不包含其他信息。要使用时区格式化,请使用SimpleDateFormat#setTimeZone()

+0

呀,日期可能重复让很多人陷入麻烦,因为它实际上只是一个时间戳。每当你处理像你这样的日子,或者我会想到他们,你真的在​​寻找使用某种日历的味道。 – CurtainDog 2010-11-09 04:02:48

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)); 
    } 
}