Проблемы с java.util.calendar и часовыми поясамиJAVA

Программисты JAVA общаются здесь
Anonymous
Проблемы с java.util.calendar и часовыми поясами

Сообщение Anonymous »

У меня есть следующий метод, который преобразует мой собственный объект DMY (дата, месяц, год) на сегодняшний день. < /p>

public static Date serverCreateDateFromDMY(DMY pDMY, TimeZone pTimeZone)
{
Calendar vCalendar = Calendar.getInstance(pTimeZone);
vCalendar.set(Calendar.YEAR, pDMY.getYear());
// Below line is because DMY month counts are 1-indexed
// and Date month counts are 0-indexed
vCalendar.set(Calendar.MONTH, pDMY.getMonthOfYear() - 1);
vCalendar.set(Calendar.DAY_OF_MONTH, pDMY.getDayOfMonth());
System.out.println(vCalendar.getTime());
TimeUtilsServer.zeroCalendarHoursAndBelow(vCalendar);
System.out.println(vCalendar.getTime());
return vCalendar.getTime();
}

public static void zeroCalendarHoursAndBelow(Calendar pToZero)
{
pToZero.set(Calendar.HOUR_OF_DAY, 0);
pToZero.set(Calendar.MINUTE, 0);
pToZero.set(Calendar.SECOND, 0);
pToZero.set(Calendar.MILLISECOND, 0);
}
< /code>

to servercreatedatefromdmy () метод, я передаю эти аргументы: dmy = 20120424, а Timezone: America /new_york. Приложение работает локально в моем часовом поясе, который является IST. < /P>

на основе вышеупомянутых входов, после печати вывода. < /P>

Tue Apr 24 14:43:07 IST 2012

Tue Apr 24 09:30:00 IST 2012
< /code>

Таким образом, как вы видите, в последнее время вывода не обнуляется. Есть предложения, пожалуйста? но все еще дата напечатана со временем, а не обнуляется. < /p>

TimeZone tz = TimeZone.getTimeZone("America/New_York");
Calendar vCalendar = Calendar.getInstance(tz);
vCalendar.set(Calendar.YEAR, 2012);

vCalendar.set(Calendar.MONTH, 4 - 1);
vCalendar.set(Calendar.DAY_OF_MONTH, 24);
DateFormat df = DateFormat.getDateTimeInstance();
df.setTimeZone(tz);
System.out.println(df.format(vCalendar.getTime()));

vCalendar.set(Calendar.HOUR_OF_DAY, vCalendar.getActualMinimum(Calendar.HOUR_OF_DAY));
vCalendar.set(Calendar.MINUTE, vCalendar.getActualMinimum(Calendar.MINUTE));
vCalendar.set(Calendar.SECOND, vCalendar.getActualMinimum(Calendar.SECOND));
vCalendar.set(Calendar.MILLISECOND, vCalendar.getActualMinimum(Calendar.MILLISECOND));
System.out.println(df.format(vCalendar.getTime()));


Подробнее здесь: https://stackoverflow.com/questions/102 ... -timezones

Вернуться в «JAVA»