blob: 7e36ed260244efd85c4f51fe6c3698838e92280c [file] [log] [blame]
using Lucene.Net.Attributes;
using Lucene.Net.Support;
using Lucene.Net.Util;
using NUnit.Framework;
using System;
using System.Globalization;
using TimeZoneConverter;
using Assert = Lucene.Net.TestFramework.Assert;
namespace Lucene.Net.Documents
{
/*
* 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.
*/
[TestFixture]
public class TestDateTools : LuceneTestCase
{
//public TestRule TestRules = RuleChain.outerRule(new SystemPropertiesRestoreRule());
[Test]
public virtual void TestStringToDate()
{
DateTime d = default;
d = DateTools.StringToDate("2004");
Assert.AreEqual("2004-01-01 00:00:00:000", IsoFormat(d));
d = DateTools.StringToDate("20040705");
Assert.AreEqual("2004-07-05 00:00:00:000", IsoFormat(d));
d = DateTools.StringToDate("200407050910");
Assert.AreEqual("2004-07-05 09:10:00:000", IsoFormat(d));
d = DateTools.StringToDate("20040705091055990");
Assert.AreEqual("2004-07-05 09:10:55:990", IsoFormat(d));
try
{
d = DateTools.StringToDate("97"); // no date
Assert.Fail();
}
catch (Exception e) when (e.IsParseException())
{
// expected exception
}
try
{
d = DateTools.StringToDate("200401011235009999"); // no date
Assert.Fail();
}
catch (Exception e) when (e.IsParseException())
{
// expected exception
}
try
{
d = DateTools.StringToDate("aaaa"); // no date
Assert.Fail();
}
catch (Exception e) when (e.IsParseException())
{
// expected exception
}
}
[Test]
[LuceneNetSpecific] // maps to testStringtoTime()
public virtual void TestStringtoTime_UnixEpoch()
{
long time = DateTools.StringToTime("197001010000", NumericRepresentation.UNIX_TIME_MILLISECONDS);
// we use default locale since LuceneTestCase randomizes it
//Calendar cal = new GregorianCalendar(TimeZone.GetTimeZone("GMT"), Locale.Default);
//cal.Clear();
DateTime cal = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); //new GregorianCalendar().ToDateTime(1970, 1, 1, 0, 0, 0, 0); // hour, minute, second - year=1970, month=january, day=1
//cal.set(DateTime.MILLISECOND, 0);
Assert.AreEqual(DateTools.TicksToUnixTimeMilliseconds(cal.Ticks), time);
cal = new DateTime(1980, 2, 2, 11, 5, 0, 0, DateTimeKind.Utc); //new GregorianCalendar().ToDateTime(1980, 2, 2, 11, 5, 0, 0); // hour, minute, second - year=1980, month=february, day=2
//cal.set(DateTime.MILLISECOND, 0);
time = DateTools.StringToTime("198002021105", NumericRepresentation.UNIX_TIME_MILLISECONDS);
Assert.AreEqual(DateTools.TicksToUnixTimeMilliseconds(cal.Ticks), time);
}
[Test]
[LuceneNetSpecific] // maps to testStringtoTime()
public virtual void TestStringtoTime_Ticks()
{
long time = DateTools.StringToTime("197001010000", NumericRepresentation.TICKS);
// we use default locale since LuceneTestCase randomizes it
//Calendar cal = new GregorianCalendar(TimeZone.GetTimeZone("GMT"), Locale.Default);
//cal.Clear();
DateTime cal = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); //new GregorianCalendar().ToDateTime(1970, 1, 1, 0, 0, 0, 0); // hour, minute, second - year=1970, month=january, day=1
//cal.set(DateTime.MILLISECOND, 0);
Assert.AreEqual(cal.Ticks, time);
cal = new DateTime(1980, 2, 2, 11, 5, 0, 0, DateTimeKind.Utc); //new GregorianCalendar().ToDateTime(1980, 2, 2, 11, 5, 0, 0); // hour, minute, second - year=1980, month=february, day=2
//cal.set(DateTime.MILLISECOND, 0);
time = DateTools.StringToTime("198002021105", NumericRepresentation.TICKS);
Assert.AreEqual(cal.Ticks, time);
}
[Test]
[LuceneNetSpecific] // maps to testStringtoTime()
public virtual void TestStringtoTime_TicksAsMilliseconds()
{
long time = DateTools.StringToTime("197001010000", NumericRepresentation.TICKS_AS_MILLISECONDS);
// we use default locale since LuceneTestCase randomizes it
//Calendar cal = new GregorianCalendar(TimeZone.GetTimeZone("GMT"), Locale.Default);
//cal.Clear();
DateTime cal = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); //new GregorianCalendar().ToDateTime(1970, 1, 1, 0, 0, 0, 0); // hour, minute, second - year=1970, month=january, day=1
//cal.set(DateTime.MILLISECOND, 0);
Assert.AreEqual(cal.Ticks / TimeSpan.TicksPerMillisecond, time);
cal = new DateTime(1980, 2, 2, 11, 5, 0, 0, DateTimeKind.Utc); //new GregorianCalendar().ToDateTime(1980, 2, 2, 11, 5, 0, 0); // hour, minute, second - year=1980, month=february, day=2
//cal.set(DateTime.MILLISECOND, 0);
time = DateTools.StringToTime("198002021105", NumericRepresentation.TICKS_AS_MILLISECONDS);
Assert.AreEqual(cal.Ticks / TimeSpan.TicksPerMillisecond, time);
}
[Test]
public virtual void TestDateAndTimetoString()
{
// we use default locale since LuceneTestCase randomizes it
//Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"), Locale.Default);
//DateTime cal = new GregorianCalendar(GregorianCalendarTypes.Localized).ToDateTime(2004, 2, 3, 22, 8, 56, 333);
DateTime cal = new DateTime(2004, 2, 3, 22, 8, 56, 333, DateTimeKind.Utc);
/*cal.clear();
cal = new DateTime(2004, 1, 3, 22, 8, 56); // hour, minute, second - year=2004, month=february(!), day=3
cal.set(DateTime.MILLISECOND, 333);*/
string dateString = DateTools.DateToString(cal, DateResolution.YEAR);
Assert.AreEqual("2004", dateString);
Assert.AreEqual("2004-01-01 00:00:00:000", IsoFormat(DateTools.StringToDate(dateString)));
dateString = DateTools.DateToString(cal, DateResolution.MONTH);
Assert.AreEqual("200402", dateString);
Assert.AreEqual("2004-02-01 00:00:00:000", IsoFormat(DateTools.StringToDate(dateString)));
dateString = DateTools.DateToString(cal, DateResolution.DAY);
Assert.AreEqual("20040203", dateString);
Assert.AreEqual("2004-02-03 00:00:00:000", IsoFormat(DateTools.StringToDate(dateString)));
dateString = DateTools.DateToString(cal, DateResolution.HOUR);
Assert.AreEqual("2004020322", dateString);
Assert.AreEqual("2004-02-03 22:00:00:000", IsoFormat(DateTools.StringToDate(dateString)));
dateString = DateTools.DateToString(cal, DateResolution.MINUTE);
Assert.AreEqual("200402032208", dateString);
Assert.AreEqual("2004-02-03 22:08:00:000", IsoFormat(DateTools.StringToDate(dateString)));
dateString = DateTools.DateToString(cal, DateResolution.SECOND);
Assert.AreEqual("20040203220856", dateString);
Assert.AreEqual("2004-02-03 22:08:56:000", IsoFormat(DateTools.StringToDate(dateString)));
dateString = DateTools.DateToString(cal, DateResolution.MILLISECOND);
Assert.AreEqual("20040203220856333", dateString);
Assert.AreEqual("2004-02-03 22:08:56:333", IsoFormat(DateTools.StringToDate(dateString)));
// date before 1970:
//cal = new GregorianCalendar().ToDateTime(1961, 3, 5, 23, 9, 51, 444); // hour, minute, second - year=1961, month=march(!), day=5
//cal.set(DateTime.MILLISECOND, 444);
cal = new DateTime(1961, 3, 5, 23, 9, 51, 444, DateTimeKind.Utc);
dateString = DateTools.DateToString(cal, DateResolution.MILLISECOND);
Assert.AreEqual("19610305230951444", dateString);
Assert.AreEqual("1961-03-05 23:09:51:444", IsoFormat(DateTools.StringToDate(dateString)));
dateString = DateTools.DateToString(cal, DateResolution.HOUR);
Assert.AreEqual("1961030523", dateString);
Assert.AreEqual("1961-03-05 23:00:00:000", IsoFormat(DateTools.StringToDate(dateString)));
// timeToString:
// ticks:
//cal = new GregorianCalendar().ToDateTime(1970, 1, 1, 0, 0, 0, 0); // hour, minute, second - year=1970, month=january, day=1
//cal.set(DateTime.MILLISECOND, 0);
cal = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
dateString = DateTools.TimeToString(cal.Ticks, DateResolution.MILLISECOND, NumericRepresentation.TICKS);
Assert.AreEqual("19700101000000000", dateString);
cal = new GregorianCalendar().ToDateTime(1970, 1, 1, 1, 2, 3, 0); // hour, minute, second - year=1970, month=january, day=1
//cal.set(DateTime.MILLISECOND, 0);
dateString = DateTools.TimeToString(cal.Ticks, DateResolution.MILLISECOND, NumericRepresentation.TICKS);
Assert.AreEqual("19700101010203000", dateString);
// unix epoch:
cal = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
dateString = DateTools.TimeToString(DateTools.TicksToUnixTimeMilliseconds(cal.Ticks), DateResolution.MILLISECOND, NumericRepresentation.UNIX_TIME_MILLISECONDS);
Assert.AreEqual("19700101000000000", dateString);
cal = new GregorianCalendar().ToDateTime(1970, 1, 1, 1, 2, 3, 0); // hour, minute, second - year=1970, month=january, day=1
//cal.set(DateTime.MILLISECOND, 0);
dateString = DateTools.TimeToString(DateTools.TicksToUnixTimeMilliseconds(cal.Ticks), DateResolution.MILLISECOND, NumericRepresentation.UNIX_TIME_MILLISECONDS);
Assert.AreEqual("19700101010203000", dateString);
// ticks as ms:
cal = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
dateString = DateTools.TimeToString(cal.Ticks / TimeSpan.TicksPerMillisecond, DateResolution.MILLISECOND, NumericRepresentation.TICKS_AS_MILLISECONDS);
Assert.AreEqual("19700101000000000", dateString);
cal = new GregorianCalendar().ToDateTime(1970, 1, 1, 1, 2, 3, 0); // hour, minute, second - year=1970, month=january, day=1
//cal.set(DateTime.MILLISECOND, 0);
dateString = DateTools.TimeToString(cal.Ticks / TimeSpan.TicksPerMillisecond, DateResolution.MILLISECOND, NumericRepresentation.TICKS_AS_MILLISECONDS);
Assert.AreEqual("19700101010203000", dateString);
}
[Test]
public virtual void TestRound()
{
// we use default locale since LuceneTestCase randomizes it
//Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"), Locale.Default);
//cal.clear();
//DateTime cal = new GregorianCalendar().ToDateTime(2004, 2, 3, 22, 8, 56, 333); // hour, minute, second - year=2004, month=february(!), day=3
//cal.set(DateTime.MILLISECOND, 333);
DateTime date = new DateTime(2004, 2, 3, 22, 8, 56, 333, DateTimeKind.Utc);
Assert.AreEqual("2004-02-03 22:08:56:333", IsoFormat(date));
DateTime dateYear = DateTools.Round(date, DateResolution.YEAR);
Assert.AreEqual("2004-01-01 00:00:00:000", IsoFormat(dateYear));
DateTime dateMonth = DateTools.Round(date, DateResolution.MONTH);
Assert.AreEqual("2004-02-01 00:00:00:000", IsoFormat(dateMonth));
DateTime dateDay = DateTools.Round(date, DateResolution.DAY);
Assert.AreEqual("2004-02-03 00:00:00:000", IsoFormat(dateDay));
DateTime dateHour = DateTools.Round(date, DateResolution.HOUR);
Assert.AreEqual("2004-02-03 22:00:00:000", IsoFormat(dateHour));
DateTime dateMinute = DateTools.Round(date, DateResolution.MINUTE);
Assert.AreEqual("2004-02-03 22:08:00:000", IsoFormat(dateMinute));
DateTime dateSecond = DateTools.Round(date, DateResolution.SECOND);
Assert.AreEqual("2004-02-03 22:08:56:000", IsoFormat(dateSecond));
DateTime dateMillisecond = DateTools.Round(date, DateResolution.MILLISECOND);
Assert.AreEqual("2004-02-03 22:08:56:333", IsoFormat(dateMillisecond));
// long parameter:
// ticks:
long dateYearLong = DateTools.Round(date.Ticks, DateResolution.YEAR, NumericRepresentation.TICKS, NumericRepresentation.TICKS);
Assert.AreEqual("2004-01-01 00:00:00:000", IsoFormat(new DateTime(dateYearLong)));
long dateMillisecondLong = DateTools.Round(date.Ticks, DateResolution.MILLISECOND, NumericRepresentation.TICKS, NumericRepresentation.TICKS);
Assert.AreEqual("2004-02-03 22:08:56:333", IsoFormat(new DateTime(dateMillisecondLong)));
// unix epoch:
dateYearLong = DateTools.Round(DateTools.TicksToUnixTimeMilliseconds(date.Ticks), DateResolution.YEAR, NumericRepresentation.UNIX_TIME_MILLISECONDS, NumericRepresentation.TICKS);
Assert.AreEqual("2004-01-01 00:00:00:000", IsoFormat(new DateTime(dateYearLong)));
dateMillisecondLong = DateTools.Round(DateTools.TicksToUnixTimeMilliseconds(date.Ticks), DateResolution.MILLISECOND, NumericRepresentation.UNIX_TIME_MILLISECONDS, NumericRepresentation.TICKS);
Assert.AreEqual("2004-02-03 22:08:56:333", IsoFormat(new DateTime(dateMillisecondLong)));
// ticks as ms:
dateYearLong = DateTools.Round(date.Ticks / TimeSpan.TicksPerMillisecond, DateResolution.YEAR, NumericRepresentation.TICKS_AS_MILLISECONDS, NumericRepresentation.TICKS);
Assert.AreEqual("2004-01-01 00:00:00:000", IsoFormat(new DateTime(dateYearLong)));
dateMillisecondLong = DateTools.Round(date.Ticks / TimeSpan.TicksPerMillisecond, DateResolution.MILLISECOND, NumericRepresentation.TICKS_AS_MILLISECONDS, NumericRepresentation.TICKS);
Assert.AreEqual("2004-02-03 22:08:56:333", IsoFormat(new DateTime(dateMillisecondLong)));
}
// LUCENENET specific - made static
private static string IsoFormat(DateTime date)
{
/*SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS", Locale.ROOT);
sdf.TimeZone = TimeZone.getTimeZone("GMT");
return sdf.Format(date);*/
return date.ToString("yyyy-MM-dd HH:mm:ss:fff", CultureInfo.InvariantCulture);
}
[Test]
[LuceneNetSpecific] // maps to testDateToolsUTC()
public virtual void TestDateToolsUTC_UnixEpoch()
{
// Sun, 30 Oct 2005 00:00:00 +0000 -- the last second of 2005's DST in Europe/London
//long time = 1130630400;
DateTime time1 = new DateTime(2005, 10, 30, 0, 0, 0, DateTimeKind.Utc);
DateTime time2 = time1.AddHours(1);
{
TimeZoneInfo timeZone = TZConvert.GetTimeZoneInfo("Europe/London");
string d1 = DateTools.DateToString(time1, timeZone, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, timeZone, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1), DateTools.TicksToUnixTimeMilliseconds(time1.Ticks), "midnight");
Assert.AreEqual(DateTools.StringToTime(d2), DateTools.TicksToUnixTimeMilliseconds(time2.Ticks), "later");
}
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1), DateTools.TicksToUnixTimeMilliseconds(time1.Ticks), "midnight");
Assert.AreEqual(DateTools.StringToTime(d2), DateTools.TicksToUnixTimeMilliseconds(time2.Ticks), "later");
}
time1 = new DateTime(2005, 10, 30, 0, 0, 0, DateTimeKind.Utc).ToLocalTime();
time2 = time1.AddHours(1);
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1), DateTools.TicksToUnixTimeMilliseconds(time1.ToUniversalTime().Ticks), "midnight");
Assert.AreEqual(DateTools.StringToTime(d2), DateTools.TicksToUnixTimeMilliseconds(time2.ToUniversalTime().Ticks), "later");
}
time1 = new DateTime(2005, 10, 30, 0, 0, 0, DateTimeKind.Unspecified);
time2 = time1.AddHours(1);
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1), DateTools.TicksToUnixTimeMilliseconds(time1.ToUniversalTime().Ticks), "midnight");
Assert.AreEqual(DateTools.StringToTime(d2), DateTools.TicksToUnixTimeMilliseconds(time2.ToUniversalTime().Ticks), "later");
}
}
[Test]
[LuceneNetSpecific] // maps to testDateToolsUTC()
public virtual void TestDateToolsUTC_Ticks()
{
// Sun, 30 Oct 2005 00:00:00 +0000 -- the last second of 2005's DST in Europe/London
//long time = 1130630400;
DateTime time1 = new DateTime(2005, 10, 30, 0, 0, 0, DateTimeKind.Utc);
DateTime time2 = time1.AddHours(1);
{
TimeZoneInfo timeZone = TZConvert.GetTimeZoneInfo("Europe/London");
string d1 = DateTools.DateToString(time1, timeZone, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, timeZone, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS), time1.Ticks, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS), time2.Ticks, "later");
}
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS), time1.Ticks, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS), time2.Ticks, "later");
}
time1 = new DateTime(2005, 10, 30, 0, 0, 0, DateTimeKind.Utc).ToLocalTime();
time2 = time1.AddHours(1);
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS), time1.ToUniversalTime().Ticks, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS), time2.ToUniversalTime().Ticks, "later");
}
time1 = new DateTime(2005, 10, 30, 0, 0, 0, DateTimeKind.Unspecified);
time2 = time1.AddHours(1);
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS), time1.ToUniversalTime().Ticks, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS), time2.ToUniversalTime().Ticks, "later");
}
}
[Test]
[LuceneNetSpecific] // maps to testDateToolsUTC()
public virtual void TestDateToolsUTC_TicksAsMilliseconds()
{
// Sun, 30 Oct 2005 00:00:00 +0000 -- the last second of 2005's DST in Europe/London
//long time = 1130630400;
DateTime time1 = new DateTime(2005, 10, 30, 0, 0, 0, DateTimeKind.Utc);
DateTime time2 = time1.AddHours(1);
{
TimeZoneInfo timeZone = TZConvert.GetTimeZoneInfo("Europe/London");
string d1 = DateTools.DateToString(time1, timeZone, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, timeZone, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS_AS_MILLISECONDS), time1.Ticks / TimeSpan.TicksPerMillisecond, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS_AS_MILLISECONDS), time2.Ticks / TimeSpan.TicksPerMillisecond, "later");
}
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS_AS_MILLISECONDS), time1.Ticks / TimeSpan.TicksPerMillisecond, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS_AS_MILLISECONDS), time2.Ticks / TimeSpan.TicksPerMillisecond, "later");
}
time1 = new DateTime(2005, 10, 30, 0, 0, 0, DateTimeKind.Utc).ToLocalTime();
time2 = time1.AddHours(1);
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS_AS_MILLISECONDS), time1.ToUniversalTime().Ticks / TimeSpan.TicksPerMillisecond, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS_AS_MILLISECONDS), time2.ToUniversalTime().Ticks / TimeSpan.TicksPerMillisecond, "later");
}
time1 = new DateTime(2005, 10, 30, 0, 0, 0, DateTimeKind.Unspecified);
time2 = time1.AddHours(1);
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS_AS_MILLISECONDS), time1.ToUniversalTime().Ticks / TimeSpan.TicksPerMillisecond, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS_AS_MILLISECONDS), time2.ToUniversalTime().Ticks / TimeSpan.TicksPerMillisecond, "later");
}
}
[Test]
[LuceneNetSpecific]
public virtual void TestDateToolsUTC_DateTimeOffset_UnixEpoch()
{
// Sun, 30 Oct 2005 00:00:00 +0000 -- the last second of 2005's DST in Europe/London
//long time = 1130630400;
DateTimeOffset time1 = new DateTimeOffset(2005, 10, 30, 0, 0, 0, TimeSpan.Zero);
DateTimeOffset time2 = time1.AddHours(1);
{
TimeZoneInfo timeZone = TZConvert.GetTimeZoneInfo("Europe/London");
DateTimeOffset tempAux = TimeZoneInfo.ConvertTime(time1, timeZone);
string d1 = DateTools.DateToString(tempAux, DateResolution.MINUTE);
DateTimeOffset tempAux2 = TimeZoneInfo.ConvertTime(time2, timeZone);
string d2 = DateTools.DateToString(tempAux2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.UNIX_TIME_MILLISECONDS), DateTools.TicksToUnixTimeMilliseconds(time1.Ticks), "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.UNIX_TIME_MILLISECONDS), DateTools.TicksToUnixTimeMilliseconds(time2.Ticks), "later");
}
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.UNIX_TIME_MILLISECONDS), DateTools.TicksToUnixTimeMilliseconds(time1.Ticks), "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.UNIX_TIME_MILLISECONDS), DateTools.TicksToUnixTimeMilliseconds(time2.Ticks), "later");
}
time1 = new DateTimeOffset(2005, 10, 30, 0, 0, 0, TimeSpan.Zero).ToLocalTime();
time2 = time1.AddHours(1);
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.UNIX_TIME_MILLISECONDS), DateTools.TicksToUnixTimeMilliseconds(time1.ToUniversalTime().Ticks), "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.UNIX_TIME_MILLISECONDS), DateTools.TicksToUnixTimeMilliseconds(time2.ToUniversalTime().Ticks), "later");
}
}
[Test]
[LuceneNetSpecific]
public virtual void TestDateToolsUTC_DateTimeOffset_Ticks()
{
// Sun, 30 Oct 2005 00:00:00 +0000 -- the last second of 2005's DST in Europe/London
//long time = 1130630400;
DateTimeOffset time1 = new DateTimeOffset(2005, 10, 30, 0, 0, 0, TimeSpan.Zero);
DateTimeOffset time2 = time1.AddHours(1);
{
TimeZoneInfo timeZone = TZConvert.GetTimeZoneInfo("Europe/London");
DateTimeOffset tempAux = TimeZoneInfo.ConvertTime(time1, timeZone);
string d1 = DateTools.DateToString(tempAux, DateResolution.MINUTE);
DateTimeOffset tempAux2 = TimeZoneInfo.ConvertTime(time2, timeZone);
string d2 = DateTools.DateToString(tempAux2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS), time1.Ticks, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS), time2.Ticks, "later");
}
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS), time1.Ticks, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS), time2.Ticks, "later");
}
time1 = new DateTimeOffset(2005, 10, 30, 0, 0, 0, TimeSpan.Zero).ToLocalTime();
time2 = time1.AddHours(1);
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS), time1.ToUniversalTime().Ticks, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS), time2.ToUniversalTime().Ticks, "later");
}
}
[Test]
[LuceneNetSpecific]
public virtual void TestDateToolsUTC_DateTimeOffset_TicksAsMilliseconds()
{
// Sun, 30 Oct 2005 00:00:00 +0000 -- the last second of 2005's DST in Europe/London
//long time = 1130630400;
DateTimeOffset time1 = new DateTimeOffset(2005, 10, 30, 0, 0, 0, TimeSpan.Zero);
DateTimeOffset time2 = time1.AddHours(1);
{
TimeZoneInfo timeZone = TZConvert.GetTimeZoneInfo("Europe/London");
DateTimeOffset tempAux = TimeZoneInfo.ConvertTime(time1, timeZone);
string d1 = DateTools.DateToString(tempAux, DateResolution.MINUTE);
DateTimeOffset tempAux2 = TimeZoneInfo.ConvertTime(time2, timeZone);
string d2 = DateTools.DateToString(tempAux2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS_AS_MILLISECONDS), time1.Ticks / TimeSpan.TicksPerMillisecond, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS_AS_MILLISECONDS), time2.Ticks / TimeSpan.TicksPerMillisecond, "later");
}
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS_AS_MILLISECONDS), time1.Ticks / TimeSpan.TicksPerMillisecond, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS_AS_MILLISECONDS), time2.Ticks / TimeSpan.TicksPerMillisecond, "later");
}
time1 = new DateTimeOffset(2005, 10, 30, 0, 0, 0, TimeSpan.Zero).ToLocalTime();
time2 = time1.AddHours(1);
{
string d1 = DateTools.DateToString(time1, DateResolution.MINUTE);
string d2 = DateTools.DateToString(time2, DateResolution.MINUTE);
Assert.IsFalse(d1.Equals(d2, StringComparison.Ordinal), "different times");
Assert.AreEqual(DateTools.StringToTime(d1, NumericRepresentation.TICKS_AS_MILLISECONDS), time1.ToUniversalTime().Ticks / TimeSpan.TicksPerMillisecond, "midnight");
Assert.AreEqual(DateTools.StringToTime(d2, NumericRepresentation.TICKS_AS_MILLISECONDS), time2.ToUniversalTime().Ticks / TimeSpan.TicksPerMillisecond, "later");
}
}
[Test]
[LuceneNetSpecific]
public void TestDocumentationComments()
{
const long unixEpochDate = 1095774611000; // javadoc appears to be wrong - this is actually what changes the GMT time as below
const long ticks = 632313714110000000; // 2004-09-21 13:50:11
Assert.AreEqual(ticks, DateTools.UnixTimeMillisecondsToTicks(unixEpochDate));
long ticksOut = DateTools.Round(ticks, DateResolution.MONTH, NumericRepresentation.TICKS, NumericRepresentation.TICKS);
const long expected = 1093996800000; // javadoc appears to be wrong - this is actually what the above is converted to
long actual = DateTools.TicksToUnixTimeMilliseconds(ticksOut);
Assert.AreEqual(expected, actual);
long unixEpochDateOut = DateTools.Round(unixEpochDate, DateResolution.MONTH, NumericRepresentation.UNIX_TIME_MILLISECONDS, NumericRepresentation.UNIX_TIME_MILLISECONDS);
Assert.AreEqual(expected, unixEpochDateOut);
}
[Test]
[LuceneNetSpecific]
public void TestLuceneCompatibility()
{
const long unixDate = 1075846136333L;
string convertedDate = DateTools.TimeToString(unixDate, DateResolution.MILLISECOND, NumericRepresentation.UNIX_TIME_MILLISECONDS);
const string expectedDate = "20040203220856333";
Assert.AreEqual(expectedDate, convertedDate);
Assert.AreEqual("2004-02-03 22:08:56:333", IsoFormat(DateTools.StringToDate(convertedDate)));
Assert.AreEqual(unixDate, DateTools.StringToTime(convertedDate));
}
[Test]
[LuceneNetSpecific] // GH-772
public void DateToString_MinDate_ShouldNotThrowArgumentOutOfRangeException()
{
var date = new DateTime();
var value = DateTools.DateToString(date, DateResolution.DAY);
Assert.AreEqual("00010101", value);
}
}
}