问题
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