/* * ==================================================================== * Copyright (c) 2005-2012 sventon project. All rights reserved. * * This software is licensed as described in the file LICENSE, which * you should have received as part of this distribution. The terms * are also available at http://www.sventon.org. * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * ==================================================================== */ package org.sventon.model; import org.junit.Assert; import org.junit.Test; import java.util.Calendar; import java.util.TimeZone; import static java.util.concurrent.TimeUnit.*; /** * */ public class DateUtilTest { /* Test ISO8601 + some SVN unique formats. svnbook gives the following examples: $ svn checkout -r {2006-02-17} $ svn checkout -r {15:30} $ svn checkout -r {15:30:00.200000} $ svn checkout -r {"2006-02-17 15:30"} $ svn checkout -r {"2006-02-17 15:30 +0230"} $ svn checkout -r {2006-02-17T15:30} $ svn checkout -r {2006-02-17T15:30Z} $ svn checkout -r {2006-02-17T15:30-04:00} $ svn checkout -r {20060217T1530} $ svn checkout -r {20060217T1530Z} $ svn checkout -r {20060217T1530-0500} */ @Test public void parseISO8601NoDate() throws Exception { final Calendar today = Calendar.getInstance(); today.set(Calendar.HOUR_OF_DAY, 15); today.set(Calendar.MINUTE, 30); today.set(Calendar.SECOND, 0); today.set(Calendar.MILLISECOND, 0); Assert.assertEquals(today.getTime(), DateUtil.parseISO8601("15:30")); // Note: We only use the last three digits (SSS) in the millisecond field, the rest is truncated. today.set(Calendar.MILLISECOND, 200); Assert.assertEquals(today.getTime(), DateUtil.parseISO8601("15:30:00.200000")); } @Test public void parseISO8601Simple() throws Exception { final Calendar cal = Calendar.getInstance(); cal.set(2006, 2 - 1, 17, 0, 0, 0); cal.set(Calendar.MILLISECOND, 0); Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("2006-02-17")); cal.set(Calendar.HOUR_OF_DAY, 15); cal.set(Calendar.MINUTE, 30); cal.set(Calendar.SECOND, 0); Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("2006-02-17 15:30")); cal.set(Calendar.ZONE_OFFSET, (int) (MILLISECONDS.convert(2, HOURS) + MILLISECONDS.convert(30, MINUTES))); Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("2006-02-17 15:30 +0230")); } @Test public void parseISO8601T_UTCFormat() throws Exception { final Calendar cal = Calendar.getInstance(); cal.set(2006, 2 - 1, 17, 15, 30, 0); cal.set(Calendar.MILLISECOND, 0); Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("2006-02-17T15:30")); cal.set(Calendar.ZONE_OFFSET, 0); Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("2006-02-17T15:30Z")); cal.set(Calendar.MILLISECOND, 314); cal.set(Calendar.ZONE_OFFSET, 0); // Note we must reset the Z again. Calendar set it back to default TZD after any operation ... ! Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("2006-02-17T15:30:00.314Z")); //2010-01-01T12:34:56.789Z } @Test public void parseISO8601T_GMTFormat() throws Exception { final Calendar cal = Calendar.getInstance(); cal.set(2006, 2 - 1, 17, 15, 30, 0); cal.set(Calendar.MILLISECOND, 0); cal.set(Calendar.ZONE_OFFSET, -(int) (MILLISECONDS.convert(4, HOURS))); Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("2006-02-17T15:30-04:00")); cal.set(Calendar.MILLISECOND, 314); cal.set(Calendar.ZONE_OFFSET, -(int) (MILLISECONDS.convert(4, HOURS))); Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("2006-02-17T15:30:00.314-04:00")); } @Test public void parseISO8601CompactTFormat() throws Exception { final Calendar cal = Calendar.getInstance(); cal.set(2006, 2 - 1, 17, 15, 30, 0); cal.set(Calendar.MILLISECOND, 0); Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("20060217T1530")); cal.set(Calendar.ZONE_OFFSET, 0); Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("20060217T1530Z")); cal.set(Calendar.ZONE_OFFSET, -(int) (MILLISECONDS.convert(4, HOURS))); Assert.assertEquals(cal.getTime(), DateUtil.parseISO8601("20060217T1530-0400")); } @Test public void formatISO8601() throws Exception { //yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z' final Calendar calStockholm = Calendar.getInstance(TimeZone.getTimeZone("Europe/Stockholm")); calStockholm.set(2010, 0, 1, 12, 34, 0); calStockholm.set(Calendar.MILLISECOND, 0); Assert.assertEquals("2010-01-01", DateUtil.formatISO8601(calStockholm.getTime())); final Calendar calStockholm2 = Calendar.getInstance(TimeZone.getTimeZone("Europe/Stockholm")); calStockholm2.set(2010, 0, 1, 12, 34, 56); calStockholm2.set(Calendar.MILLISECOND, 0); Assert.assertEquals("2010-01-01", DateUtil.formatISO8601(calStockholm2.getTime())); final Calendar calUtc = Calendar.getInstance(TimeZone.getTimeZone("UTC")); calUtc.set(2010, 0, 1, 12, 34, 56); calUtc.set(Calendar.MILLISECOND, 0); Assert.assertEquals("2010-01-01", DateUtil.formatISO8601(calUtc.getTime())); } }