Я использую время Джоды для проверки временной метки с часовым поясом. Когда я прошел недействительную дату или время, он работал, как ожидалось. Например, когда я прохожу 99 секунды, как он дал следующую ошибку:Jodatime часовой пояс преобразование
Exception in thread "main" org.joda.time.IllegalFieldValueException: Cannot
parse "20131231235999+00": Value 99 for secondOfMinute must be in the range [0,59]
Я ожидал, что бросить подобное исключение с я передал недействительный часовой пояс, а также. Я ожидал, что это значение UTC смещает значения меньше -12 и больше +14 часов (http://en.wikipedia.org/wiki/List_of_time_zones_by_UTC_offset). Это дало следующую ошибку, когда значение смещения превышает 23 часа.
Exception in thread "main" java.lang.IllegalArgumentException: Invalid
format: "20131231235959+24" is malformed at "24"
Я думаю, что у меня что-то отсутствует, так как это указывает на ошибку в течение 24-го часа. Может кто-то объяснить, почему он позволяет смещать значения < -12 и> 14 часов.
Ниже приведен пример программы с выводом для различных смещений:
public static void main(String[] args) throws ParseException, DatatypeConfigurationException
{
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyyMMddHHmmssZ").withZoneUTC();
String dateString = "";
for (int i = 0; i < 24; i++)
{
if (i < 10)
{
dateString = "20131231235959+0" + i;
DateTime dt1 = dtf.parseDateTime(dateString);
System.err.println(dateString + " = " + dt1);
}
else
{
dateString = "20131231235959+" + i;
DateTime dt1 = dtf.parseDateTime(dateString);
System.err.println(dateString + " = " + dt1);
}
}
for (int i = 0; i < 24; i++)
{
if (i < 10)
{
dateString = "20131231235959-0" + i;
DateTime dt1 = dtf.parseDateTime(dateString);
System.err.println(dateString + " = " + dt1);
}
else
{
dateString = "20131231235959-" + i;
DateTime dt1 = dtf.parseDateTime(dateString);
System.err.println(dateString + " = " + dt1);
}
}
}
Output:
20131231235959+00 = 2013-12-31T23:59:59.000Z 20131231235959-00 = 2013-12-31T23:59:59.000Z
20131231235959+01 = 2013-12-31T22:59:59.000Z 20131231235959-01 = 2014-01-01T00:59:59.000Z
20131231235959+02 = 2013-12-31T21:59:59.000Z 20131231235959-02 = 2014-01-01T01:59:59.000Z
20131231235959+03 = 2013-12-31T20:59:59.000Z 20131231235959-03 = 2014-01-01T02:59:59.000Z
20131231235959+04 = 2013-12-31T19:59:59.000Z 20131231235959-04 = 2014-01-01T03:59:59.000Z
20131231235959+05 = 2013-12-31T18:59:59.000Z 20131231235959-05 = 2014-01-01T04:59:59.000Z
20131231235959+06 = 2013-12-31T17:59:59.000Z 20131231235959-06 = 2014-01-01T05:59:59.000Z
20131231235959+07 = 2013-12-31T16:59:59.000Z 20131231235959-07 = 2014-01-01T06:59:59.000Z
20131231235959+08 = 2013-12-31T15:59:59.000Z 20131231235959-08 = 2014-01-01T07:59:59.000Z
20131231235959+09 = 2013-12-31T14:59:59.000Z 20131231235959-09 = 2014-01-01T08:59:59.000Z
20131231235959+10 = 2013-12-31T13:59:59.000Z 20131231235959-10 = 2014-01-01T09:59:59.000Z
20131231235959+11 = 2013-12-31T12:59:59.000Z 20131231235959-11 = 2014-01-01T10:59:59.000Z
20131231235959+12 = 2013-12-31T11:59:59.000Z 20131231235959-12 = 2014-01-01T11:59:59.000Z
20131231235959+13 = 2013-12-31T10:59:59.000Z 20131231235959-13 = 2014-01-01T12:59:59.000Z
20131231235959+14 = 2013-12-31T09:59:59.000Z 20131231235959-14 = 2014-01-01T13:59:59.000Z
20131231235959+15 = 2013-12-31T08:59:59.000Z 20131231235959-15 = 2014-01-01T14:59:59.000Z
20131231235959+16 = 2013-12-31T07:59:59.000Z 20131231235959-16 = 2014-01-01T15:59:59.000Z
20131231235959+17 = 2013-12-31T06:59:59.000Z 20131231235959-17 = 2014-01-01T16:59:59.000Z
20131231235959+18 = 2013-12-31T05:59:59.000Z 20131231235959-18 = 2014-01-01T17:59:59.000Z
20131231235959+19 = 2013-12-31T04:59:59.000Z 20131231235959-19 = 2014-01-01T18:59:59.000Z
20131231235959+20 = 2013-12-31T03:59:59.000Z 20131231235959-20 = 2014-01-01T19:59:59.000Z
20131231235959+21 = 2013-12-31T02:59:59.000Z 20131231235959-21 = 2014-01-01T20:59:59.000Z
20131231235959+22 = 2013-12-31T01:59:59.000Z 20131231235959-22 = 2014-01-01T21:59:59.000Z
20131231235959+23 = 2013-12-31T00:59:59.000Z 20131231235959-23 = 2014-01-01T22:59:59.000Z
Спасибо,
Anand
У меня такое чувство, что оно связано с «просто потому, что это текущий диапазон, это может не всегда быть» мышлением. Учитывая, что абсолютное смещение, превышающее 12, уже присутствует, значит, что-то меньшее, чем полный день. Абсолютное смещение 24 или выше было бы чрезвычайно странным, тем не менее (особенно потому, что это не обязано быть «одним полным днем» ....) –