/* * (C) Copyright 2013-2016 Nuxeo SA (http://nuxeo.com/) and others. * * 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. * * Contributors: * dmetzler * tmartins */ package org.nuxeo.ecm.core.schema.utils; import static org.junit.Assert.*; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import org.junit.Test; /** * @author dmetzler */ public class DateParserTest { @Test public void parseTestDate() throws Exception { // SUPNXP-7186 that threw an exception Calendar cal = DateParser.parse("2012-11-29T13:15:18.176+0000"); assertEquals(13, cal.get(Calendar.HOUR_OF_DAY)); cal = DateParser.parse("2012-11-29T13:15:18.176+0200"); assertEquals(11, cal.get(Calendar.HOUR_OF_DAY)); cal = DateParser.parse("0002-11-29T23:00:00.00Z"); assertEquals(2, cal.get(Calendar.YEAR)); assertEquals(Calendar.NOVEMBER, cal.get(Calendar.MONTH)); } @Test public void testFormatDate() { Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("UTC")); cal.setTimeInMillis(0); assertEquals("1970-01-01T00:00:00.000Z", DateParser.formatW3CDateTime(cal)); cal.setTimeInMillis(1486660428314L); assertEquals("2017-02-09T17:13:48.314Z", DateParser.formatW3CDateTime(cal)); } @Test public void testReverseParsingDate() throws Exception { // NXP-19153: force time zone TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // first test with date set to zero Date d = new Date(0); String s = DateParser.formatW3CDateTime(d); Calendar cal = Calendar.getInstance(); // test String to Date cal.setTime(DateParser.parseW3CDateTime(s)); assertEquals(1970, cal.get(Calendar.YEAR)); assertEquals(0, cal.get(Calendar.MONTH)); // test String to Calendar cal = DateParser.parse(s); assertEquals(1970, cal.get(Calendar.YEAR)); assertEquals(0, cal.get(Calendar.MONTH)); assertEquals(1, cal.get(Calendar.DAY_OF_MONTH)); // then test with a regular calendar 2/1/1 Calendar gcal = Calendar.getInstance(); gcal.set(Calendar.YEAR, 2); gcal.set(Calendar.MONTH, 1); // second month = February gcal.set(Calendar.DAY_OF_MONTH, 1); s = DateParser.formatW3CDateTime(gcal.getTime()); cal.setTime(DateParser.parseW3CDateTime(s)); assertEquals(gcal.get(Calendar.YEAR), cal.get(Calendar.YEAR)); assertEquals(Calendar.FEBRUARY, cal.get(Calendar.MONTH)); cal = DateParser.parse(s); assertEquals(2, cal.get(Calendar.YEAR)); assertEquals(1, cal.get(Calendar.MONTH)); assertEquals(1, cal.get(Calendar.DAY_OF_MONTH)); } @Test public void parseTimeZone() throws Exception { Calendar cal = DateParser.parse("2012-11-29T13:15:18.176Z"); assertEquals(13, cal.get(Calendar.HOUR_OF_DAY)); cal = DateParser.parse("2012-11-29T13:15:18.176+0100"); assertEquals(12, cal.get(Calendar.HOUR_OF_DAY)); cal = DateParser.parse("2012-11-29T13:15:18.176+01:00"); assertEquals(12, cal.get(Calendar.HOUR_OF_DAY)); cal = DateParser.parse("2012-11-29T13:15:18.176+01"); assertEquals(12, cal.get(Calendar.HOUR_OF_DAY)); cal = DateParser.parse("2012-11-29T13:15:18.176-0100"); assertEquals(14, cal.get(Calendar.HOUR_OF_DAY)); } }