2012-09-05 16 views
-1

土耳其有两个TimeZone GMT + 2和GMT + 3。 我想将GMT + 2日期更改为GMT + 3,但我希望保护GMT + 2时区中的小时和分钟。在Java中更改日期对象的时区?

我想花几个小时和几分钟,然后将这些值设置为GMT + 3 TimeZone日期。结果,小时和分钟不得改变,但时区必须仅改变。功能toconvert日期必须是GMT + 2格式,但返回值必须是GMT + 3格式。如何清楚地做到这一点?

public static Date convertTimezone(Date toConvert) { 
    Date date = new Date(); 
    date.setYear(toConvert.getYear()); 
    date.setMonth(toConvert.getMonth()); 
    date.setHours(toConvert.getHours()); 
    date.setMinutes(toConvert.getMinutes()); 
    return date; 
} 
+1

日期没有时区的概念?也许使用日历? – Adam

+0

输入和期望输出的一些示例将使您更容易理解您想要代码执行的操作。 – Affe

+0

我解决了我的问题,我了解到:它是关于DateFormat而不是Date的。感谢大家。 – yetAnotherSE

回答

5

在Java中,代表一个时间点,没有别的。这意味着,Date对此一无所知的打印方式,哪个时区等......

时区,因此是你当打印Date设置。类DateFormat通常用于打印,时区是您可以在DateFormat上设置的属性的一部分。通常,人们使用子类SimpleDateFormat

0

java.util.Date无法跟踪您的时区详细信息。改为使用日历

0

在这种情况下,您不应该使用Date对象。改用日历。

public static Calendar convertTimezone(Calendar toConvert) { 
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+3")); 
    calendar.set(Calendar.YEAR, toConvert.get(Calendar.YEAR)); 
    calendar.set(Calendar.MONTH, toConvert.get(Calendar.MONTH)); 
    calendar.set(Calendar.DATE, toConvert.get(Calendar.DATE)); 
    calendar.set(Calendar.HOUR_OF_DAY, toConvert.get(Calendar.HOUR_OF_DAY)); 
    calendar.set(Calendar.MINUTE, toConvert.get(Calendar.MINUTE)); 
    return calendar; 
} 
+0

为什么不使用calendar.setTime(toConvert.getTime())? – Adam

+0

@亚当他想保存源日期的小时。 – sebastian

0

您可以使用Calender API来转换一个时区到其他

public static Date convertTimezone(Date toConvert) { 
    Calender calendar = Calendar.getInstance(); 
    calender.setTime(toConvert); 
    int hour = calender.get(Calender.HOUR_OF_DAY); 
    int minutes = calender.get(Calender.MINUTE); 
    Calendar ret = new GregorianCalender(timeZone); //timeZone is destination TimeZone 
    ret.setTimeInMillis(calendar.getTimeInMillis() + 
      timeZone.getOffset(calendar.getTimeInMillis()) - 
      TimeZone.getDefault().getOffset(calendar.getTimeInMillis())); 
    ret.set(Calender.HOUR_OD_DAY, hour); 
    ret.set(Calender.MINUTE, minutes); 

    return ret.getTime(); 
} 
相关问题