/* * Copyright 2001-2006 Stephen Colebourne * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.joda.time.format; import java.util.Locale; import java.util.TimeZone; import junit.framework.TestCase; import junit.framework.TestSuite; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; /** * This class is a Junit unit test for ISODateTimeFormat parsing. * * @author Stephen Colebourne */ public class TestISODateTimeFormatParsing extends TestCase { private DateTimeZone originalDateTimeZone = null; private TimeZone originalTimeZone = null; private Locale originalLocale = null; public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static TestSuite suite() { return new TestSuite(TestISODateTimeFormatParsing.class); } public TestISODateTimeFormatParsing(String name) { super(name); } protected void setUp() throws Exception { originalDateTimeZone = DateTimeZone.getDefault(); originalTimeZone = TimeZone.getDefault(); originalLocale = Locale.getDefault(); DateTimeZone.setDefault(DateTimeZone.forID("Europe/London")); TimeZone.setDefault(TimeZone.getTimeZone("Europe/London")); Locale.setDefault(Locale.UK); } protected void tearDown() throws Exception { DateTimeZone.setDefault(originalDateTimeZone); TimeZone.setDefault(originalTimeZone); Locale.setDefault(originalLocale); originalDateTimeZone = null; originalTimeZone = null; originalLocale = null; } //----------------------------------------------------------------------- public void test_dateParser() { DateTimeFormatter parser = ISODateTimeFormat.dateParser(); assertParse(parser, true, "2006-06-09"); assertParse(parser, true, "2006-W27-3"); assertParse(parser, true, "2006-123"); assertParse(parser, true, "2006-06-09T+02:00"); assertParse(parser, true, "2006-W27-3T+02:00"); assertParse(parser, true, "2006-123T+02:00"); assertParse(parser, false, "2006-06-09T10:20:30.040"); assertParse(parser, false, "2006-W27-3T10:20:30.040"); assertParse(parser, false, "2006-123T10:20:30.040"); assertParse(parser, false, "2006-06-09T10:20:30.040+02:00"); assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00"); assertParse(parser, false, "2006-123T10:20:30.040+02:00"); assertParse(parser, false, "T10:20:30.040"); assertParse(parser, false, "T10.5"); assertParse(parser, false, "T10:20:30.040+02:00"); assertParse(parser, false, "T10.5+02:00"); assertParse(parser, false, "10:20:30.040"); assertParse(parser, false, "10.5"); assertParse(parser, false, "10:20:30.040+02:00"); assertParse(parser, false, "10.5+02:00"); } //----------------------------------------------------------------------- public void test_localDateParser() { DateTimeFormatter parser = ISODateTimeFormat.localDateParser(); assertEquals(DateTimeZone.UTC, parser.getZone()); assertParse(parser, true, "2006-06-09"); assertParse(parser, true, "2006-W27-3"); assertParse(parser, true, "2006-123"); assertParse(parser, false, "2006-06-09T+02:00"); assertParse(parser, false, "2006-W27-3T+02:00"); assertParse(parser, false, "2006-123T+02:00"); assertParse(parser, false, "2006-06-09T10:20:30.040"); assertParse(parser, false, "2006-W27-3T10:20:30.040"); assertParse(parser, false, "2006-123T10:20:30.040"); assertParse(parser, false, "2006-06-09T10:20:30.040+02:00"); assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00"); assertParse(parser, false, "2006-123T10:20:30.040+02:00"); assertParse(parser, false, "T10:20:30.040"); assertParse(parser, false, "T10.5"); assertParse(parser, false, "T10:20:30.040+02:00"); assertParse(parser, false, "T10.5+02:00"); assertParse(parser, false, "10:20:30.040"); assertParse(parser, false, "10.5"); assertParse(parser, false, "10:20:30.040+02:00"); assertParse(parser, false, "10.5+02:00"); } //----------------------------------------------------------------------- public void test_dateElementParser() { DateTimeFormatter parser = ISODateTimeFormat.dateElementParser(); assertParse(parser, "2006-06-09", new DateTime(2006, 6, 9, 0, 0, 0, 0)); assertParse(parser, "2006-06-9", new DateTime(2006, 6, 9, 0, 0, 0, 0)); assertParse(parser, "2006-6-09", new DateTime(2006, 6, 9, 0, 0, 0, 0)); assertParse(parser, "2006-6-9", new DateTime(2006, 6, 9, 0, 0, 0, 0)); assertParse(parser, true, "2006-W27-3"); assertParse(parser, true, "2006-123"); assertParse(parser, false, "2006-06-09T+02:00"); assertParse(parser, false, "2006-W27-3T+02:00"); assertParse(parser, false, "2006-123T+02:00"); assertParse(parser, false, "2006-06-09T10:20:30.040"); assertParse(parser, false, "2006-W27-3T10:20:30.040"); assertParse(parser, false, "2006-123T10:20:30.040"); assertParse(parser, false, "2006-06-09T10:20:30.040+02:00"); assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00"); assertParse(parser, false, "2006-123T10:20:30.040+02:00"); assertParse(parser, false, "T10:20:30.040"); assertParse(parser, false, "T10.5"); assertParse(parser, false, "T10:20:30.040+02:00"); assertParse(parser, false, "T10.5+02:00"); assertParse(parser, false, "10:20:30.040"); assertParse(parser, false, "10.5"); assertParse(parser, false, "10:20:30.040+02:00"); assertParse(parser, false, "10.5+02:00"); } //----------------------------------------------------------------------- public void test_timeParser() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.timeParser(); assertParse(parser, false, "2006-06-09"); assertParse(parser, false, "2006-W27-3"); assertParse(parser, false, "2006-123"); assertParse(parser, false, "2006-06-09T+02:00"); assertParse(parser, false, "2006-W27-3T+02:00"); assertParse(parser, false, "2006-123T+02:00"); assertParse(parser, false, "2006-06-09T10:20:30.040"); assertParse(parser, false, "2006-W27-3T10:20:30.040"); assertParse(parser, false, "2006-123T10:20:30.040"); assertParse(parser, false, "2006-06-09T10:20:30.040+02:00"); assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00"); assertParse(parser, false, "2006-123T10:20:30.040+02:00"); assertParse(parser, "T10:20:30.040000000", new DateTime(1970, 1, 1, 10, 20, 30, 40)); assertParse(parser, "T10:20:30.004", new DateTime(1970, 1, 1, 10, 20, 30, 4)); assertParse(parser, "T10:20:30.040", new DateTime(1970, 1, 1, 10, 20, 30, 40)); assertParse(parser, "T10:20:30.400", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "T10.5", new DateTime(1970, 1, 1, 10, 30, 0, 0)); assertParse(parser, "T10:20:30.040+02:00", new DateTime(1970, 1, 1, 8, 20, 30, 40)); assertParse(parser, "T10.5+02:00", new DateTime(1970, 1, 1, 8, 30, 0, 0)); assertParse(parser, true, "10:20:30.040"); assertParse(parser, true, "10.5"); assertParse(parser, true, "10:20:30.040+02:00"); assertParse(parser, true, "10.5+02:00"); } //----------------------------------------------------------------------- public void test_localTimeParser() { DateTimeFormatter parser = ISODateTimeFormat.localTimeParser(); assertEquals(DateTimeZone.UTC, parser.getZone()); assertParse(parser, false, "2006-06-09"); assertParse(parser, false, "2006-W27-3"); assertParse(parser, false, "2006-123"); assertParse(parser, false, "2006-06-09T+02:00"); assertParse(parser, false, "2006-W27-3T+02:00"); assertParse(parser, false, "2006-123T+02:00"); assertParse(parser, false, "2006-06-09T10:20:30.040"); assertParse(parser, false, "2006-W27-3T10:20:30.040"); assertParse(parser, false, "2006-123T10:20:30.040"); assertParse(parser, false, "2006-06-09T10:20:30.040+02:00"); assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00"); assertParse(parser, false, "2006-123T10:20:30.040+02:00"); assertParse(parser, true, "T10:20:30.040"); assertParse(parser, true, "T10.5"); assertParse(parser, false, "T10:20:30.040+02:00"); assertParse(parser, false, "T10.5+02:00"); assertParse(parser, true, "10:20:30.040"); assertParse(parser, true, "10.5"); assertParse(parser, false, "10:20:30.040+02:00"); assertParse(parser, false, "10.5+02:00"); assertParse(parser, true, "00:00:10.512345678"); assertEquals(10512, parser.parseMillis("00:00:10.512345678")); } //----------------------------------------------------------------------- public void test_timeElementParser() { DateTimeFormatter parser = ISODateTimeFormat.timeElementParser(); assertParse(parser, false, "2006-06-09"); assertParse(parser, false, "2006-W27-3"); assertParse(parser, false, "2006-123"); assertParse(parser, false, "2006-06-09T+02:00"); assertParse(parser, false, "2006-W27-3T+02:00"); assertParse(parser, false, "2006-123T+02:00"); assertParse(parser, false, "2006-06-09T10:20:30.040"); assertParse(parser, false, "2006-W27-3T10:20:30.040"); assertParse(parser, false, "2006-123T10:20:30.040"); assertParse(parser, false, "2006-06-09T10:20:30.040+02:00"); assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00"); assertParse(parser, false, "2006-123T10:20:30.040+02:00"); assertParse(parser, false, "T10:20:30.040"); assertParse(parser, false, "T10.5"); assertParse(parser, false, "T10:20:30.040+02:00"); assertParse(parser, false, "T10.5+02:00"); assertParse(parser, true, "10:20:30.040"); assertParse(parser, true, "10.5"); assertParse(parser, false, "10:20:30.040+02:00"); assertParse(parser, false, "10.5+02:00"); assertParse(parser, true, "00:00:10.512345678"); // result is offset by London DST in 1970-01-01 assertEquals(10512, parser.parseMillis("00:00:10.512345678") + DateTimeZone.getDefault().getOffset(0L)); } //----------------------------------------------------------------------- public void test_dateTimeParser() { DateTimeFormatter parser = ISODateTimeFormat.dateTimeParser(); assertParse(parser, true, "2006-06-09"); assertParse(parser, true, "2006-W27-3"); assertParse(parser, true, "2006-123"); assertParse(parser, true, "2006-06-09T+02:00"); assertParse(parser, true, "2006-W27-3T+02:00"); assertParse(parser, true, "2006-123T+02:00"); assertParse(parser, true, "2006-06-09T10:20:30.040"); assertParse(parser, true, "2006-W27-3T10:20:30.040"); assertParse(parser, true, "2006-123T10:20:30.040"); assertParse(parser, true, "2006-06-09T10:20:30.040+02:00"); assertParse(parser, true, "2006-W27-3T10:20:30.040+02:00"); assertParse(parser, true, "2006-123T10:20:30.040+02:00"); assertParse(parser, true, "T10:20:30.040"); assertParse(parser, true, "T10.5"); assertParse(parser, true, "T10:20:30.040+02:00"); assertParse(parser, true, "T10.5+02:00"); assertParse(parser, false, "10:20:30.040"); assertParse(parser, false, "10.5"); assertParse(parser, false, "10:20:30.040+02:00"); assertParse(parser, false, "10.5+02:00"); } //----------------------------------------------------------------------- public void test_dateOptionalTimeParser() { DateTimeFormatter parser = ISODateTimeFormat.dateOptionalTimeParser(); assertParse(parser, true, "2006-06-09"); assertParse(parser, true, "2006-W27-3"); assertParse(parser, true, "2006-123"); assertParse(parser, true, "2006-06-09T+02:00"); assertParse(parser, true, "2006-W27-3T+02:00"); assertParse(parser, true, "2006-123T+02:00"); assertParse(parser, true, "2006-06-09T10:20:30.040"); assertParse(parser, true, "2006-W27-3T10:20:30.040"); assertParse(parser, true, "2006-123T10:20:30.040"); assertParse(parser, true, "2006-06-09T10:20:30.040+02:00"); assertParse(parser, true, "2006-W27-3T10:20:30.040+02:00"); assertParse(parser, true, "2006-123T10:20:30.040+02:00"); assertParse(parser, false, "T10:20:30.040"); assertParse(parser, false, "T10.5"); assertParse(parser, false, "T10:20:30.040+02:00"); assertParse(parser, false, "T10.5+02:00"); assertParse(parser, false, "10:20:30.040"); assertParse(parser, false, "10.5"); assertParse(parser, false, "10:20:30.040+02:00"); assertParse(parser, false, "10.5+02:00"); } //----------------------------------------------------------------------- public void test_localDateOptionalTimeParser() { DateTimeFormatter parser = ISODateTimeFormat.localDateOptionalTimeParser(); assertEquals(DateTimeZone.UTC, parser.getZone()); assertParse(parser, true, "2006-06-09"); assertParse(parser, true, "2006-W27-3"); assertParse(parser, true, "2006-123"); assertParse(parser, false, "2006-06-09T+02:00"); assertParse(parser, false, "2006-W27-3T+02:00"); assertParse(parser, false, "2006-123T+02:00"); assertParse(parser, true, "2006-06-09T10:20:30.040"); assertParse(parser, true, "2006-W27-3T10:20:30.040"); assertParse(parser, true, "2006-123T10:20:30.040"); assertParse(parser, false, "2006-06-09T10:20:30.040+02:00"); assertParse(parser, false, "2006-W27-3T10:20:30.040+02:00"); assertParse(parser, false, "2006-123T10:20:30.040+02:00"); assertParse(parser, false, "T10:20:30.040"); assertParse(parser, false, "T10.5"); assertParse(parser, false, "T10:20:30.040+02:00"); assertParse(parser, false, "T10.5+02:00"); assertParse(parser, false, "10:20:30.040"); assertParse(parser, false, "10.5"); assertParse(parser, false, "10:20:30.040+02:00"); assertParse(parser, false, "10.5+02:00"); } //----------------------------------------------------------------------- //----------------------------------------------------------------------- //----------------------------------------------------------------------- public void test_date() { DateTimeFormatter parser = ISODateTimeFormat.date(); assertParse(parser, "2006-02-04", new DateTime(2006, 2, 4, 0, 0, 0, 0)); assertParse(parser, "2006-2-04", new DateTime(2006, 2, 4, 0, 0, 0, 0)); assertParse(parser, "2006-02-4", new DateTime(2006, 2, 4, 0, 0, 0, 0)); assertParse(parser, "2006-2-4", new DateTime(2006, 2, 4, 0, 0, 0, 0)); assertParse(parser, false, "2006-02-"); assertParse(parser, false, "2006-02"); assertParse(parser, false, "2006--4"); assertParse(parser, false, "2006-1"); assertParse(parser, false, "2006"); } //----------------------------------------------------------------------- public void test_time() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.time(); assertParse(parser, "10:20:30.400999999Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "10:20:30.400Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "10:20:30.40Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "10:20:30.4Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "5:6:7.8Z", new DateTime(1970, 1, 1, 5, 6, 7, 800)); assertParse(parser, false, "10:20.400Z"); assertParse(parser, false, "10:2.400Z"); assertParse(parser, false, "10.400Z"); assertParse(parser, false, "1.400Z"); } //----------------------------------------------------------------------- public void test_timeNoMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.timeNoMillis(); assertParse(parser, "10:20:30Z", new DateTime(1970, 1, 1, 10, 20, 30, 0)); assertParse(parser, "5:6:7Z", new DateTime(1970, 1, 1, 5, 6, 7, 0)); assertParse(parser, false, "10:20Z"); assertParse(parser, false, "10:2Z"); assertParse(parser, false, "10Z"); assertParse(parser, false, "1Z"); } //----------------------------------------------------------------------- public void test_tTime() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.tTime(); assertParse(parser, "T10:20:30.400999999Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "T10:20:30.400Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "T10:20:30.40Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "T10:20:30.4Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "T5:6:7.8Z", new DateTime(1970, 1, 1, 5, 6, 7, 800)); assertParse(parser, false, "T10:20.400Z"); assertParse(parser, false, "T102.400Z"); assertParse(parser, false, "T10.400Z"); assertParse(parser, false, "T1.400Z"); } //----------------------------------------------------------------------- public void test_tTimeNoMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.tTimeNoMillis(); assertParse(parser, "T10:20:30Z", new DateTime(1970, 1, 1, 10, 20, 30, 0)); assertParse(parser, "T5:6:7Z", new DateTime(1970, 1, 1, 5, 6, 7, 0)); assertParse(parser, false, "T10:20Z"); assertParse(parser, false, "T10:2Z"); assertParse(parser, false, "T10Z"); assertParse(parser, false, "T1Z"); } //----------------------------------------------------------------------- public void test_dateTime() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.dateTime(); assertParse(parser, "2006-02-04T10:20:30.400999999Z", new DateTime(2006, 2, 4, 10, 20, 30, 400)); assertParse(parser, "2006-02-04T10:20:30.400Z", new DateTime(2006, 2, 4, 10, 20, 30, 400)); assertParse(parser, "2006-02-04T10:20:30.40Z", new DateTime(2006, 2, 4, 10, 20, 30, 400)); assertParse(parser, "2006-02-04T10:20:30.4Z", new DateTime(2006, 2, 4, 10, 20, 30, 400)); assertParse(parser, "2006-02-4T10:20:30.400Z", new DateTime(2006, 2, 4, 10, 20, 30, 400)); assertParse(parser, "2006-2-04T10:20:30.400Z", new DateTime(2006, 2, 4, 10, 20, 30, 400)); assertParse(parser, "2006-2-4T10:20:30.400Z", new DateTime(2006, 2, 4, 10, 20, 30, 400)); assertParse(parser, "2006-02-04T5:6:7.800Z", new DateTime(2006, 2, 4, 5, 6, 7, 800)); assertParse(parser, false, "2006-02-T10:20:30.400Z"); assertParse(parser, false, "2006-12T10:20:30.400Z"); assertParse(parser, false, "2006-1T10:20:30.400Z"); assertParse(parser, false, "2006T10:20:30.400Z"); assertParse(parser, false, "200T10:20:30.400Z"); assertParse(parser, false, "20T10:20:30.400Z"); assertParse(parser, false, "2T10:20:30.400Z"); assertParse(parser, false, "2006-02-04T10:20.400Z"); assertParse(parser, false, "2006-02-04T10:2.400Z"); assertParse(parser, false, "2006-02-04T10.400Z"); assertParse(parser, false, "2006-02-04T1.400Z"); } //----------------------------------------------------------------------- public void test_dateTimeNoMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.dateTimeNoMillis(); assertParse(parser, "2006-02-04T10:20:30Z", new DateTime(2006, 2, 4, 10, 20, 30, 0)); assertParse(parser, "2006-02-4T10:20:30Z", new DateTime(2006, 2, 4, 10, 20, 30, 0)); assertParse(parser, "2006-2-04T10:20:30Z", new DateTime(2006, 2, 4, 10, 20, 30, 0)); assertParse(parser, "2006-2-4T10:20:30Z", new DateTime(2006, 2, 4, 10, 20, 30, 0)); assertParse(parser, "2006-02-04T5:6:7Z", new DateTime(2006, 2, 4, 5, 6, 7, 0)); assertParse(parser, false, "2006-02-T10:20:30Z"); assertParse(parser, false, "2006-12T10:20:30Z"); assertParse(parser, false, "2006-1T10:20:30Z"); assertParse(parser, false, "2006T10:20:30Z"); assertParse(parser, false, "200T10:20:30Z"); assertParse(parser, false, "20T10:20:30Z"); assertParse(parser, false, "2T10:20:30Z"); assertParse(parser, false, "2006-02-04T10:20Z"); assertParse(parser, false, "2006-02-04T10:2Z"); assertParse(parser, false, "2006-02-04T10Z"); assertParse(parser, false, "2006-02-04T1Z"); } //----------------------------------------------------------------------- public void test_ordinalDate() { DateTimeFormatter parser = ISODateTimeFormat.ordinalDate(); assertParse(parser, "2006-123", new DateTime(2006, 1, 1, 0, 0, 0, 0).withDayOfYear(123)); assertParse(parser, "2006-12", new DateTime(2006, 1, 1, 0, 0, 0, 0).withDayOfYear(12)); assertParse(parser, "2006-1", new DateTime(2006, 1, 1, 0, 0, 0, 0).withDayOfYear(1)); assertParse(parser, false, "2006-"); assertParse(parser, false, "2006"); } //----------------------------------------------------------------------- public void test_ordinalDateTime() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.ordinalDateTime(); assertParse(parser, "2006-123T10:20:30.400999999Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123)); assertParse(parser, "2006-123T10:20:30.400Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123)); assertParse(parser, "2006-123T10:20:30.40Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123)); assertParse(parser, "2006-123T10:20:30.4Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123)); assertParse(parser, "2006-12T10:20:30.400Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(12)); assertParse(parser, "2006-1T10:20:30.400Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(1)); assertParse(parser, "2006-123T5:6:7.800Z", new DateTime(2006, 1, 1, 5, 6, 7, 800).withDayOfYear(123)); assertParse(parser, false, "2006-T10:20:30.400Z"); assertParse(parser, false, "2006T10:20:30.400Z"); assertParse(parser, false, "2006-123T10:20.400Z"); assertParse(parser, false, "2006-123T10:2.400Z"); assertParse(parser, false, "2006-123T10.400Z"); assertParse(parser, false, "2006-123T1.400Z"); } //----------------------------------------------------------------------- public void test_ordinalDateTimeNoMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.ordinalDateTimeNoMillis(); assertParse(parser, "2006-123T10:20:30Z", new DateTime(2006, 1, 1, 10, 20, 30, 0).withDayOfYear(123)); assertParse(parser, "2006-12T10:20:30Z", new DateTime(2006, 1, 1, 10, 20, 30, 0).withDayOfYear(12)); assertParse(parser, "2006-1T10:20:30Z", new DateTime(2006, 1, 1, 10, 20, 30, 0).withDayOfYear(1)); assertParse(parser, "2006-123T5:6:7Z", new DateTime(2006, 1, 1, 5, 6, 7, 0).withDayOfYear(123)); assertParse(parser, false, "2006-T10:20:30Z"); assertParse(parser, false, "2006T10:20:30Z"); assertParse(parser, false, "2006-123T10:20Z"); assertParse(parser, false, "2006-123T10:2Z"); assertParse(parser, false, "2006-123T10Z"); assertParse(parser, false, "2006-123T1Z"); } //----------------------------------------------------------------------- public void test_weekDate() { DateTimeFormatter parser = ISODateTimeFormat.weekDate(); assertParse(parser, "2006-W27-3", new DateTime(2006, 6, 1, 0, 0, 0, 0).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, "2006-W2-3", new DateTime(2006, 6, 1, 0, 0, 0, 0).withWeekOfWeekyear(2).withDayOfWeek(3)); assertParse(parser, false, "2006-W-3"); assertParse(parser, false, "2006-W27-"); assertParse(parser, false, "2006-W27"); assertParse(parser, false, "2006-W2"); assertParse(parser, false, "2006-W"); } //----------------------------------------------------------------------- public void test_weekDateTime() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.weekDateTime(); assertParse(parser, "2006-W27-3T10:20:30.400999999Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, "2006-W27-3T10:20:30.400Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, "2006-W27-3T10:20:30.40Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, "2006-W27-3T10:20:30.4Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, "2006-W2-3T10:20:30.400Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(2).withDayOfWeek(3)); assertParse(parser, "2006-W27-3T5:6:7.800Z", new DateTime(2006, 6, 1, 5, 6, 7, 800).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, false, "2006-W27-T10:20:30.400Z"); assertParse(parser, false, "2006-W27T10:20:30.400Z"); assertParse(parser, false, "2006-W2T10:20:30.400Z"); assertParse(parser, false, "2006-W-3T10:20:30.400Z"); assertParse(parser, false, "2006-W27-3T10:20.400Z"); assertParse(parser, false, "2006-W27-3T10:2.400Z"); assertParse(parser, false, "2006-W27-3T10.400Z"); assertParse(parser, false, "2006-W27-3T1.400Z"); } //----------------------------------------------------------------------- public void test_weekDateTimeNoMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.weekDateTimeNoMillis(); assertParse(parser, "2006-W27-3T10:20:30Z", new DateTime(2006, 6, 1, 10, 20, 30, 0).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, "2006-W2-3T10:20:30Z", new DateTime(2006, 6, 1, 10, 20, 30, 0).withWeekOfWeekyear(2).withDayOfWeek(3)); assertParse(parser, "2006-W27-3T5:6:7Z", new DateTime(2006, 6, 1, 5, 6, 7, 0).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, false, "2006-W27-T10:20:30Z"); assertParse(parser, false, "2006-W27T10:20:30Z"); assertParse(parser, false, "2006-W2T10:20:30Z"); assertParse(parser, false, "2006-W-3T10:20:30Z"); assertParse(parser, false, "2006-W27-3T10:20Z"); assertParse(parser, false, "2006-W27-3T10:2Z"); assertParse(parser, false, "2006-W27-3T10Z"); assertParse(parser, false, "2006-W27-3T1Z"); } //----------------------------------------------------------------------- //----------------------------------------------------------------------- //----------------------------------------------------------------------- public void test_basicDate() { DateTimeFormatter parser = ISODateTimeFormat.basicDate(); assertParse(parser, "20060204", new DateTime(2006, 2, 4, 0, 0, 0, 0)); assertParse(parser, false, "2006024"); assertParse(parser, false, "200602"); assertParse(parser, false, "20061"); assertParse(parser, false, "2006"); } //----------------------------------------------------------------------- public void test_basicTime() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.basicTime(); assertParse(parser, "102030.400999999Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "102030.400Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "102030.40Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "102030.4Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, false, "10203.400Z"); assertParse(parser, false, "1020.400Z"); assertParse(parser, false, "102.400Z"); assertParse(parser, false, "10.400Z"); assertParse(parser, false, "1.400Z"); } //----------------------------------------------------------------------- public void test_basicTimeNoMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.basicTimeNoMillis(); assertParse(parser, "102030Z", new DateTime(1970, 1, 1, 10, 20, 30, 0)); assertParse(parser, false, "10203Z"); assertParse(parser, false, "1020Z"); assertParse(parser, false, "102Z"); assertParse(parser, false, "10Z"); assertParse(parser, false, "1Z"); } //----------------------------------------------------------------------- public void test_basicTTime() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.basicTTime(); assertParse(parser, "T102030.400999999Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "T102030.400Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "T102030.40Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "T102030.4Z", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, false, "T10203.400Z"); assertParse(parser, false, "T1020.400Z"); assertParse(parser, false, "T102.400Z"); assertParse(parser, false, "T10.400Z"); assertParse(parser, false, "T1.400Z"); } //----------------------------------------------------------------------- public void test_basicTTimeNoMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.basicTTimeNoMillis(); assertParse(parser, "T102030Z", new DateTime(1970, 1, 1, 10, 20, 30, 0)); assertParse(parser, false, "T10203Z"); assertParse(parser, false, "T1020Z"); assertParse(parser, false, "T102Z"); assertParse(parser, false, "T10Z"); assertParse(parser, false, "T1Z"); } //----------------------------------------------------------------------- public void test_basicDateTime() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.basicDateTime(); assertParse(parser, "20061204T102030.400999999Z", new DateTime(2006, 12, 4, 10, 20, 30, 400)); assertParse(parser, "20061204T102030.400Z", new DateTime(2006, 12, 4, 10, 20, 30, 400)); assertParse(parser, "20061204T102030.40Z", new DateTime(2006, 12, 4, 10, 20, 30, 400)); assertParse(parser, "20061204T102030.4Z", new DateTime(2006, 12, 4, 10, 20, 30, 400)); assertParse(parser, false, "2006120T102030.400Z"); assertParse(parser, false, "200612T102030.400Z"); assertParse(parser, false, "20061T102030.400Z"); assertParse(parser, false, "2006T102030.400Z"); assertParse(parser, false, "200T102030.400Z"); assertParse(parser, false, "20T102030.400Z"); assertParse(parser, false, "2T102030.400Z"); assertParse(parser, false, "20061204T10203.400Z"); assertParse(parser, false, "20061204T1020.400Z"); assertParse(parser, false, "20061204T102.400Z"); assertParse(parser, false, "20061204T10.400Z"); assertParse(parser, false, "20061204T1.400Z"); } //----------------------------------------------------------------------- public void test_basicDateTimeNoMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.basicDateTimeNoMillis(); assertParse(parser, "20061204T102030Z", new DateTime(2006, 12, 4, 10, 20, 30, 0)); assertParse(parser, false, "2006120T102030Z"); assertParse(parser, false, "200612T102030Z"); assertParse(parser, false, "20061T102030Z"); assertParse(parser, false, "2006T102030Z"); assertParse(parser, false, "200T102030Z"); assertParse(parser, false, "20T102030Z"); assertParse(parser, false, "2T102030Z"); assertParse(parser, false, "20061204T10203Z"); assertParse(parser, false, "20061204T1020Z"); assertParse(parser, false, "20061204T102Z"); assertParse(parser, false, "20061204T10Z"); assertParse(parser, false, "20061204T1Z"); } //----------------------------------------------------------------------- public void test_basicOrdinalDate() { DateTimeFormatter parser = ISODateTimeFormat.basicOrdinalDate(); assertParse(parser, "2006123", new DateTime(2006, 1, 1, 0, 0, 0, 0).withDayOfYear(123)); assertParse(parser, false, "200612"); assertParse(parser, false, "20061"); assertParse(parser, false, "2006"); } //----------------------------------------------------------------------- public void test_basicOrdinalDateTime() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.basicOrdinalDateTime(); assertParse(parser, "2006123T102030.400999999Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123)); assertParse(parser, "2006123T102030.400Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123)); assertParse(parser, "2006123T102030.40Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123)); assertParse(parser, "2006123T102030.4Z", new DateTime(2006, 1, 1, 10, 20, 30, 400).withDayOfYear(123)); assertParse(parser, false, "200612T102030.400Z"); assertParse(parser, false, "20061T102030.400Z"); assertParse(parser, false, "2006T102030.400Z"); assertParse(parser, false, "200T102030.400Z"); assertParse(parser, false, "20T102030.400Z"); assertParse(parser, false, "2T102030.400Z"); assertParse(parser, false, "2006123T10203.400Z"); assertParse(parser, false, "2006123T1020.400Z"); assertParse(parser, false, "2006123T102.400Z"); assertParse(parser, false, "2006123T10.400Z"); assertParse(parser, false, "2006123T1.400Z"); } //----------------------------------------------------------------------- public void test_basicOrdinalDateTimeNoMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.basicOrdinalDateTimeNoMillis(); assertParse(parser, "2006123T102030Z", new DateTime(2006, 1, 1, 10, 20, 30, 0).withDayOfYear(123)); assertParse(parser, false, "200612T102030Z"); assertParse(parser, false, "20061T102030Z"); assertParse(parser, false, "2006T102030Z"); assertParse(parser, false, "200T102030Z"); assertParse(parser, false, "20T102030Z"); assertParse(parser, false, "2T102030Z"); assertParse(parser, false, "2006123T10203Z"); assertParse(parser, false, "2006123T1020Z"); assertParse(parser, false, "2006123T102Z"); assertParse(parser, false, "2006123T10Z"); assertParse(parser, false, "2006123T1Z"); } //----------------------------------------------------------------------- public void test_basicWeekDate() { DateTimeFormatter parser = ISODateTimeFormat.basicWeekDate(); assertParse(parser, "2006W273", new DateTime(2006, 6, 1, 0, 0, 0, 0).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, false, "2006W27"); assertParse(parser, false, "2006W2"); assertParse(parser, false, "2006W"); } //----------------------------------------------------------------------- public void test_basicWeekDateTime() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.basicWeekDateTime(); assertParse(parser, "2006W273T102030.400999999Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, "2006W273T102030.400Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, "2006W273T102030.40Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, "2006W273T102030.4Z", new DateTime(2006, 6, 1, 10, 20, 30, 400).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, false, "2006W27T102030.400Z"); assertParse(parser, false, "2006W2T102030.400Z"); assertParse(parser, false, "2006W273T10203.400Z"); assertParse(parser, false, "2006W273T1020.400Z"); assertParse(parser, false, "2006W273T102.400Z"); assertParse(parser, false, "2006W273T10.400Z"); assertParse(parser, false, "2006W273T1.400Z"); } //----------------------------------------------------------------------- public void test_basicWeekDateTimeNoMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.basicWeekDateTimeNoMillis(); assertParse(parser, "2006W273T102030Z", new DateTime(2006, 6, 1, 10, 20, 30, 0).withWeekOfWeekyear(27).withDayOfWeek(3)); assertParse(parser, false, "2006W27T102030Z"); assertParse(parser, false, "2006W2T102030Z"); assertParse(parser, false, "2006W273T10203Z"); assertParse(parser, false, "2006W273T1020Z"); assertParse(parser, false, "2006W273T102Z"); assertParse(parser, false, "2006W273T10Z"); assertParse(parser, false, "2006W273T1Z"); } //----------------------------------------------------------------------- //----------------------------------------------------------------------- //----------------------------------------------------------------------- public void test_hourMinute() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.hourMinute(); assertParse(parser, "10:20", new DateTime(1970, 1, 1, 10, 20, 0, 0)); assertParse(parser, "5:6", new DateTime(1970, 1, 1, 5, 6, 0, 0)); assertParse(parser, false, "10:20:30.400999999"); assertParse(parser, false, "10:20:30.400"); assertParse(parser, false, "10:20:30"); assertParse(parser, false, "10:20.400"); assertParse(parser, false, "10:2.400"); assertParse(parser, false, "10.400"); assertParse(parser, false, "1.400"); } //----------------------------------------------------------------------- public void test_hourMinuteSecond() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.hourMinuteSecond(); assertParse(parser, "10:20:30", new DateTime(1970, 1, 1, 10, 20, 30, 0)); assertParse(parser, "5:6:7", new DateTime(1970, 1, 1, 5, 6, 7, 0)); assertParse(parser, false, "10:20:30.400999999"); assertParse(parser, false, "10:20:30.400"); assertParse(parser, false, "10:20:30.4"); assertParse(parser, false, "10:20.400"); assertParse(parser, false, "10:2.400"); assertParse(parser, false, "10.400"); assertParse(parser, false, "1.400"); } //----------------------------------------------------------------------- public void test_hourMinuteSecondMillis() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.hourMinuteSecondMillis(); assertParse(parser, "10:20:30.400", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "10:20:30.40", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "10:20:30.4", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "5:6:7.8", new DateTime(1970, 1, 1, 5, 6, 7, 800)); assertParse(parser, false, "10:20:30.400999999"); assertParse(parser, false, "10:20.400"); assertParse(parser, false, "10:2.400"); assertParse(parser, false, "10.400"); assertParse(parser, false, "1.400"); } //----------------------------------------------------------------------- public void test_hourMinuteSecondFraction() { DateTimeZone.setDefault(DateTimeZone.UTC); DateTimeFormatter parser = ISODateTimeFormat.hourMinuteSecondFraction(); assertParse(parser, "10:20:30.400999999", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "10:20:30.400", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "10:20:30.40", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "10:20:30.4", new DateTime(1970, 1, 1, 10, 20, 30, 400)); assertParse(parser, "5:6:7.8", new DateTime(1970, 1, 1, 5, 6, 7, 800)); assertParse(parser, false, "10:20.400"); assertParse(parser, false, "10:2.400"); assertParse(parser, false, "10.400"); assertParse(parser, false, "1.400"); } //----------------------------------------------------------------------- //----------------------------------------------------------------------- //----------------------------------------------------------------------- private void assertParse(DateTimeFormatter parser, boolean expected, String str) { if (expected) { parser.parseMillis(str); } else { try { parser.parseMillis(str); fail(); } catch (IllegalArgumentException ex) { // expected } } } private void assertParse(DateTimeFormatter parser, String str, DateTime expected) { DateTime dt = parser.parseDateTime(str); assertEquals(expected, dt); } }