提交 0e6a9baa authored 作者: Sergi Vladykin's avatar Sergi Vladykin

Merge pull request #224 from stevemcleod/moscow_timezone_fix

Fix for date-handling error in "Europe/Moscow" timezone with Java 1.8.0_60
......@@ -91,6 +91,7 @@ public class DateTimeUtils {
c = Calendar.getInstance();
CACHED_CALENDAR.set(c);
}
c.clear();
return c;
}
......@@ -106,6 +107,7 @@ public class DateTimeUtils {
c = Calendar.getInstance(tz);
CACHED_CALENDAR_NON_DEFAULT_TIMEZONE.set(c);
}
c.clear();
return c;
}
......@@ -423,7 +425,6 @@ public class DateTimeUtils {
} else {
c = getCalendar(tz);
}
c.clear();
c.setLenient(lenient);
setCalendarFields(c, year, month, day, hour, minute, second, millis);
return c.getTime().getTime();
......@@ -490,7 +491,8 @@ public class DateTimeUtils {
* @return the milliseconds
*/
public static long getTimeLocalWithoutDst(java.util.Date d) {
return d.getTime() + getCalendar().get(Calendar.ZONE_OFFSET);
Calendar calendar = getCalendar();
return d.getTime() + calendar.get(Calendar.ZONE_OFFSET);
}
/**
......@@ -503,7 +505,6 @@ public class DateTimeUtils {
public static long getTimeUTCWithoutDst(long millis) {
return millis - getCalendar().get(Calendar.ZONE_OFFSET);
}
/**
* Return the day of week according to the ISO 8601 specification. Week
* starts at Monday. See also http://en.wikipedia.org/wiki/ISO_8601
......@@ -772,7 +773,6 @@ public class DateTimeUtils {
*/
public static long dateValueFromDate(long ms) {
Calendar cal = getCalendar();
cal.clear();
cal.setTimeInMillis(ms);
return dateValueFromCalendar(cal);
}
......@@ -800,7 +800,6 @@ public class DateTimeUtils {
*/
public static long nanosFromDate(long ms) {
Calendar cal = getCalendar();
cal.clear();
cal.setTimeInMillis(ms);
return nanosFromCalendar(cal);
}
......
......@@ -473,6 +473,12 @@ public class TestDate extends TestBase {
ts2.getTimestamp(), Calendar.getInstance());
assertEquals("-999-08-07 13:14:15.16", ts1a.getString());
assertEquals("19999-08-07 13:14:15.16", ts2a.getString());
// test for bug on Java 1.8.0_60 in "Europe/Moscow" timezone. Doesn't affect most other timezones
long millis = 1407437460000L;
long result1 = DateTimeUtils.nanosFromDate(DateTimeUtils.getTimeUTCWithoutDst(millis));
long result2 = DateTimeUtils.nanosFromDate(DateTimeUtils.getTimeUTCWithoutDst(millis));
assertEquals(result1, result2);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论