| // 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 org.apache.doris.common.util; |
| |
| import mockit.Expectations; |
| import mockit.Mocked; |
| import org.apache.doris.analysis.DateLiteral; |
| import org.apache.doris.catalog.PrimitiveType; |
| import org.apache.doris.catalog.ScalarType; |
| import org.apache.doris.common.AnalysisException; |
| import org.apache.doris.common.FeConstants; |
| |
| import org.apache.doris.common.DdlException; |
| import org.junit.Assert; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import java.time.ZoneId; |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.TimeZone; |
| |
| public class TimeUtilsTest { |
| |
| @Mocked |
| TimeUtils timeUtils; |
| |
| @Before |
| public void setUp() { |
| TimeZone tz = TimeZone.getTimeZone(ZoneId.of("Asia/Shanghai")); |
| new Expectations(timeUtils) { |
| { |
| TimeUtils.getTimeZone(); |
| minTimes = 0; |
| result = tz; |
| } |
| }; |
| } |
| |
| @Test |
| public void testNormal() { |
| Assert.assertNotNull(TimeUtils.getCurrentFormatTime()); |
| Assert.assertNotNull(TimeUtils.getStartTime()); |
| Assert.assertTrue(TimeUtils.getEstimatedTime(0L) > 0); |
| |
| Assert.assertEquals(-62167420800000L, TimeUtils.MIN_DATE.getTime()); |
| Assert.assertEquals(253402185600000L, TimeUtils.MAX_DATE.getTime()); |
| Assert.assertEquals(-62167420800000L, TimeUtils.MIN_DATETIME.getTime()); |
| Assert.assertEquals(253402271999000L, TimeUtils.MAX_DATETIME.getTime()); |
| } |
| |
| @Test |
| public void testDateParse() { |
| // date |
| List<String> validDateList = new LinkedList<>(); |
| validDateList.add("2013-12-02"); |
| validDateList.add("2013-12-02"); |
| validDateList.add("2013-12-2"); |
| validDateList.add("2013-12-2"); |
| validDateList.add("9999-12-31"); |
| validDateList.add("1900-01-01"); |
| validDateList.add("2013-2-28"); |
| validDateList.add("0000-01-01"); |
| for (String validDate : validDateList) { |
| try { |
| TimeUtils.parseDate(validDate, PrimitiveType.DATE); |
| } catch (AnalysisException e) { |
| e.printStackTrace(); |
| System.out.println(validDate); |
| Assert.fail(); |
| } |
| } |
| |
| List<String> invalidDateList = new LinkedList<>(); |
| invalidDateList.add("2013-12-02 "); |
| invalidDateList.add(" 2013-12-02"); |
| invalidDateList.add("20131-2-28"); |
| invalidDateList.add("a2013-2-28"); |
| invalidDateList.add("2013-22-28"); |
| invalidDateList.add("2013-2-29"); |
| invalidDateList.add("2013-2-28 2:3:4"); |
| for (String invalidDate : invalidDateList) { |
| try { |
| TimeUtils.parseDate(invalidDate, PrimitiveType.DATE); |
| Assert.fail(); |
| } catch (AnalysisException e) { |
| Assert.assertTrue(e.getMessage().contains("Invalid")); |
| } |
| } |
| |
| // datetime |
| List<String> validDateTimeList = new LinkedList<>(); |
| validDateTimeList.add("2013-12-02 13:59:59"); |
| validDateTimeList.add("2013-12-2 13:59:59"); |
| validDateTimeList.add("2013-12-2 1:59:59"); |
| validDateTimeList.add("2013-12-2 3:1:1"); |
| validDateTimeList.add("9999-12-31 23:59:59"); |
| validDateTimeList.add("1900-01-01 00:00:00"); |
| validDateTimeList.add("2013-2-28 23:59:59"); |
| validDateTimeList.add("2013-2-28 2:3:4"); |
| validDateTimeList.add("2014-05-07 19:8:50"); |
| validDateTimeList.add("0000-01-01 00:00:00"); |
| for (String validDateTime : validDateTimeList) { |
| try { |
| TimeUtils.parseDate(validDateTime, PrimitiveType.DATETIME); |
| } catch (AnalysisException e) { |
| e.printStackTrace(); |
| System.out.println(validDateTime); |
| Assert.fail(); |
| } |
| } |
| |
| List<String> invalidDateTimeList = new LinkedList<>(); |
| invalidDateTimeList.add("2013-12-02 12:12:10"); |
| invalidDateTimeList.add(" 2013-12-02 12:12:10 "); |
| invalidDateTimeList.add("20131-2-28 12:12:10"); |
| invalidDateTimeList.add("a2013-2-28 12:12:10"); |
| invalidDateTimeList.add("2013-22-28 12:12:10"); |
| invalidDateTimeList.add("2013-2-29 12:12:10"); |
| invalidDateTimeList.add("2013-2-28"); |
| invalidDateTimeList.add("2013-13-01 12:12:12"); |
| for (String invalidDateTime : invalidDateTimeList) { |
| try { |
| TimeUtils.parseDate(invalidDateTime, PrimitiveType.DATETIME); |
| Assert.fail(); |
| } catch (AnalysisException e) { |
| Assert.assertTrue(e.getMessage().contains("Invalid")); |
| } |
| } |
| } |
| |
| @Test |
| public void testDateTrans() throws AnalysisException { |
| Assert.assertEquals(FeConstants.null_string, TimeUtils.longToTimeString(-2)); |
| |
| long timestamp = 1426125600000L; |
| Assert.assertEquals("2015-03-12 10:00:00", TimeUtils.longToTimeString(timestamp)); |
| |
| DateLiteral date = new DateLiteral("2015-03-01", ScalarType.DATE); |
| Assert.assertEquals(1031777L, date.getRealValue()); |
| |
| DateLiteral datetime = new DateLiteral("2015-03-01 12:00:00", ScalarType.DATETIME); |
| Assert.assertEquals(20150301120000L, datetime.getRealValue()); |
| } |
| |
| @Test |
| public void testTimezone() throws AnalysisException { |
| try { |
| Assert.assertEquals("CST", TimeUtils.checkTimeZoneValidAndStandardize("CST")); |
| Assert.assertEquals("+08:00", TimeUtils.checkTimeZoneValidAndStandardize("+08:00")); |
| Assert.assertEquals("+08:00", TimeUtils.checkTimeZoneValidAndStandardize("+8:00")); |
| Assert.assertEquals("-08:00", TimeUtils.checkTimeZoneValidAndStandardize("-8:00")); |
| Assert.assertEquals("+08:00", TimeUtils.checkTimeZoneValidAndStandardize("8:00")); |
| } catch (DdlException ex) { |
| Assert.fail(); |
| } |
| try { |
| TimeUtils.checkTimeZoneValidAndStandardize("FOO"); |
| Assert.fail(); |
| } catch (DdlException ex) { |
| Assert.assertTrue(ex.getMessage().contains("Unknown or incorrect time zone: 'FOO'")); |
| } |
| } |
| |
| } |