Change a Date Object's Timezone in Java?

北慕城南 提交于 2019-12-13 08:02:52

问题


Turkey has two TimeZone GMT+2 and GMT+3. I want to change the GMT+2 dates into GMT+3, but I want to protect hours and minutes that in GMT+2 TimeZone.

I want to take hours and minutes, and then set these values into GMT+3 TimeZone date. At result there must be no change in hours and minutes but the timeZone must be change only. At function toconvert date is must be GMT+2 format, but the return value must be GMT+3 format. How to do it clearly?

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:


In Java a Date represents a point in time, nothing else. This means that Date knows nothing about how it is printed, which time zone etc...

Time Zone is therefore something you set when printing the Date. The class DateFormat is typically used for printing and the time zone is part of the properties you can set on DateFormat. Typically, people use the subclass SimpleDateFormat.




回答2:


java.util.Date cannot track your Timezone details. Use Calendar instead




回答3:


You shouldn't use a Date object in this case. Use Calendar instead.

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



回答4:


You can make use of Calender API to convert one timezone to other

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


来源:https://stackoverflow.com/questions/12275811/change-a-date-objects-timezone-in-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!