/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 com.aliyun.odps.commons.util; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import com.aliyun.odps.TestBase; public class DateUtilsTest extends TestBase { private static Calendar c1 = Calendar.getInstance(); //0001-01-01 00:00:00 private static Calendar c2 = Calendar.getInstance(); //1927-12-31 23:54:07 private static Calendar c3 = Calendar.getInstance(); //1928-01-01 00:00:00 private static Calendar c4 = Calendar.getInstance(); //1970-01-01 00:00:00 private static Calendar c5 = Calendar.getInstance(); //1997-08-31 23:59:59 private static Calendar c6 = Calendar.getInstance(); //1997-09-01 00:59:59 private static Calendar c7 = Calendar.getInstance(); //2000-02-29 23:59:59 private static Calendar c8 = Calendar.getInstance(); //2014-08-26 15:22:46 private static Calendar c9 = Calendar.getInstance(); //2018-11-30 23:59:59 private static Calendar c10 = Calendar.getInstance(); //2499-01-01 00:00:00 private static Calendar c11 = Calendar.getInstance(); //1986-05-04 01:00:00 private static Calendar c12 = Calendar.getInstance(); //1986-05-04 02:00:00 private static long __0001_01_01_00_00_00 = -62135625952L; private static long __1927_12_31_23_54_07 = -1325491905L; private static long __1928_01_01_00_00_00 = -1325491200L; private static long __1970_01_01_00_00_00 = -28800L; private static long __1997_08_31_23_59_59 = 873043199L; private static long __1997_09_01_00_59_59 = 873046799L; private static long __2000_02_29_23_59_59 = 951839999L; private static long __2014_08_26_15_22_46 = 1409037766L; private static long __2018_11_30_23_59_59 = 1543593599L; private static long __2499_01_01_00_00_00 = 16693660800L; private static long __1986_05_04_01_00_00 = 515520000L; private static long __1986_05_04_02_00_00 = 515523600L; @Before public void setUp() throws Exception { c1.set(Calendar.YEAR, 1); c1.set(Calendar.MONTH, 1 - 1); c1.set(Calendar.DAY_OF_MONTH, 1); c1.set(Calendar.HOUR_OF_DAY, 0); c1.set(Calendar.MINUTE, 0); c1.set(Calendar.SECOND, 0); c1.set(Calendar.MILLISECOND, 0); c2.set(Calendar.YEAR, 1927); c2.set(Calendar.MONTH, 12 - 1); c2.set(Calendar.DAY_OF_MONTH, 31); c2.set(Calendar.HOUR_OF_DAY, 23); c2.set(Calendar.MINUTE, 54); c2.set(Calendar.SECOND, 7); c2.set(Calendar.MILLISECOND, 0); c3.set(Calendar.YEAR, 1928); c3.set(Calendar.MONTH, 1 - 1); c3.set(Calendar.DAY_OF_MONTH, 1); c3.set(Calendar.HOUR_OF_DAY, 0); c3.set(Calendar.MINUTE, 0); c3.set(Calendar.SECOND, 0); c3.set(Calendar.MILLISECOND, 0); c4.set(Calendar.YEAR, 1970); c4.set(Calendar.MONTH, 1 - 1); c4.set(Calendar.DAY_OF_MONTH, 1); c4.set(Calendar.HOUR_OF_DAY, 0); c4.set(Calendar.MINUTE, 0); c4.set(Calendar.SECOND, 0); c4.set(Calendar.MILLISECOND, 0); c5.set(Calendar.YEAR, 1997); c5.set(Calendar.MONTH, 8 - 1); c5.set(Calendar.DAY_OF_MONTH, 31); c5.set(Calendar.HOUR_OF_DAY, 23); c5.set(Calendar.MINUTE, 59); c5.set(Calendar.SECOND, 59); c5.set(Calendar.MILLISECOND, 0); c6.set(Calendar.YEAR, 1997); c6.set(Calendar.MONTH, 9 - 1); c6.set(Calendar.DAY_OF_MONTH, 1); c6.set(Calendar.HOUR_OF_DAY, 0); c6.set(Calendar.MINUTE, 59); c6.set(Calendar.SECOND, 59); c6.set(Calendar.MILLISECOND, 0); c7.set(Calendar.YEAR, 2000); c7.set(Calendar.MONTH, 2 - 1); c7.set(Calendar.DAY_OF_MONTH, 29); c7.set(Calendar.HOUR_OF_DAY, 23); c7.set(Calendar.MINUTE, 59); c7.set(Calendar.SECOND, 59); c7.set(Calendar.MILLISECOND, 0); c8.set(Calendar.YEAR, 2014); c8.set(Calendar.MONTH, 8 - 1); c8.set(Calendar.DAY_OF_MONTH, 26); c8.set(Calendar.HOUR_OF_DAY, 15); c8.set(Calendar.MINUTE, 22); c8.set(Calendar.SECOND, 46); c8.set(Calendar.MILLISECOND, 0); c9.set(Calendar.YEAR, 2018); c9.set(Calendar.MONTH, 11 - 1); c9.set(Calendar.DAY_OF_MONTH, 30); c9.set(Calendar.HOUR_OF_DAY, 23); c9.set(Calendar.MINUTE, 59); c9.set(Calendar.SECOND, 59); c9.set(Calendar.MILLISECOND, 0); c10.set(Calendar.YEAR, 2499); c10.set(Calendar.MONTH, 1 - 1); c10.set(Calendar.DAY_OF_MONTH, 1); c10.set(Calendar.HOUR_OF_DAY, 0); c10.set(Calendar.MINUTE, 0); c10.set(Calendar.SECOND, 0); c10.set(Calendar.MILLISECOND, 0); c11.set(Calendar.YEAR, 1986); c11.set(Calendar.MONTH, 5 - 1); c11.set(Calendar.DAY_OF_MONTH, 4); c11.set(Calendar.HOUR_OF_DAY, 1); c11.set(Calendar.MINUTE, 0); c11.set(Calendar.SECOND, 0); c11.set(Calendar.MILLISECOND, 0); c12.set(Calendar.YEAR, 1986); c12.set(Calendar.MONTH, 5 - 1); c12.set(Calendar.DAY_OF_MONTH, 4); c12.set(Calendar.HOUR_OF_DAY, 2); c12.set(Calendar.MINUTE, 0); c12.set(Calendar.SECOND, 0); c12.set(Calendar.MILLISECOND, 0); } @After public void tearDown() throws Exception { } @Test public void testRawtime2date() throws IOException { Assert.assertEquals(DateUtils.rawtime2date(__0001_01_01_00_00_00), c1.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__1927_12_31_23_54_07), c2.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__1928_01_01_00_00_00), c3.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__1970_01_01_00_00_00), c4.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__1997_08_31_23_59_59), c5.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__1997_09_01_00_59_59), c6.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__2000_02_29_23_59_59), c7.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__2014_08_26_15_22_46), c8.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__2018_11_30_23_59_59), c9.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__2499_01_01_00_00_00), c10.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__1986_05_04_01_00_00), c11.getTime()); Assert.assertEquals(DateUtils.rawtime2date(__1986_05_04_02_00_00), c12.getTime()); } @Test public void testDate2rawtime() throws IOException { Assert.assertEquals(DateUtils.date2rawtime(c1.getTime()), __0001_01_01_00_00_00); Assert.assertEquals(DateUtils.date2rawtime(c2.getTime()), __1927_12_31_23_54_07); Assert.assertEquals(DateUtils.date2rawtime(c3.getTime()), __1928_01_01_00_00_00); Assert.assertEquals(DateUtils.date2rawtime(c4.getTime()), __1970_01_01_00_00_00); Assert.assertEquals(DateUtils.date2rawtime(c5.getTime()), __1997_08_31_23_59_59); Assert.assertEquals(DateUtils.date2rawtime(c6.getTime()), __1997_09_01_00_59_59); Assert.assertEquals(DateUtils.date2rawtime(c7.getTime()), __2000_02_29_23_59_59); Assert.assertEquals(DateUtils.date2rawtime(c8.getTime()), __2014_08_26_15_22_46); Assert.assertEquals(DateUtils.date2rawtime(c9.getTime()), __2018_11_30_23_59_59); Assert.assertEquals(DateUtils.date2rawtime(c10.getTime()), __2499_01_01_00_00_00); Assert.assertEquals(DateUtils.date2rawtime(c11.getTime()), __1986_05_04_01_00_00); Assert.assertEquals(DateUtils.date2rawtime(c12.getTime()), __1986_05_04_02_00_00); } @Test public void testEquality() throws IOException { Assert.assertEquals(c1.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c1.getTime()))); Assert.assertEquals(c2.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c2.getTime()))); Assert.assertEquals(c3.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c3.getTime()))); Assert.assertEquals(c4.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c4.getTime()))); Assert.assertEquals(c5.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c5.getTime()))); Assert.assertEquals(c6.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c6.getTime()))); Assert.assertEquals(c7.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c7.getTime()))); Assert.assertEquals(c8.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c8.getTime()))); Assert.assertEquals(c9.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c9.getTime()))); Assert .assertEquals(c10.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c10.getTime()))); Assert .assertEquals(c11.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c11.getTime()))); Assert .assertEquals(c12.getTime(), DateUtils.rawtime2date(DateUtils.date2rawtime(c12.getTime()))); } @Ignore @Test public void testUTCOffset() throws IOException { Calendar cal = Calendar.getInstance(); cal.clear(); cal.set(9999, 0, 1, 0, 0, 0); // 9999-1-1 long lastTime = cal.getTimeInMillis(); cal.clear(); cal.set(0, 0, 1, 0, 0, 0); // 0001-1-1 long startTime = cal.getTimeInMillis(); long t = startTime; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); while (t <= lastTime) { java.sql.Date d = java.sql.Date.valueOf(format.format(t)); long off = DateUtils.getDayOffset(d); java.sql.Date resD = DateUtils.fromDayOffset(off); Assert.assertEquals(d, resD); cal.add(Calendar.DATE, 1); t = cal.getTimeInMillis(); } } }