Change a Date Object's Timezone in Java?

2019-09-21 01:36发布

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

4条回答
仙女界的扛把子
2楼-- · 2019-09-21 01:44

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.

查看更多
冷血范
3楼-- · 2019-09-21 01:46

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

查看更多
狗以群分
4楼-- · 2019-09-21 01:47

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();
}
查看更多
Emotional °昔
5楼-- · 2019-09-21 01:58

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;
}
查看更多
登录 后发表回答