using System; using Util.Helpers; using Xunit; using Convert = Util.Helpers.Convert; namespace Util.Tests.Extensions; /// /// 日期扩展测试 /// public class DateTimeExtensionsTest : IDisposable { #region 测试初始化 /// /// 日期字符串1,值为 2012-12-12 12:12:12 /// private string _dateString1 = "2012-12-12 12:12:12"; /// /// 日期字符串2,值为 2012-12-12 20:12:12 /// private string _dateString2 = "2012-12-12 20:12:12"; /// /// 日期字符串3,值为 2012-12-12 12:12 /// private string _dateString3 = "2012-12-12 12:12"; /// /// 日期字符串4,值为 2012-12-12 20:12 /// private string _dateString4 = "2012-12-12 20:12"; /// /// 日期1,值为 2012-12-12 12:12:12 /// private DateTime _date = new DateTime( 2012, 12, 12, 12, 12, 12 ); /// /// Utc日期,值为 2012-12-12 12:12:12 /// private DateTime _utcDate = new DateTime( 2012, 12, 12, 12, 12, 12,DateTimeKind.Utc ); /// /// 可空日期1,值为 2012-12-12 12:12:12 /// private DateTime? _nullabledate = new DateTime( 2012, 12, 12, 12, 12, 12 ); /// /// 可空Utc日期,值为 2012-12-12 12:12:12 /// private DateTime? _nullableUtcDate = new DateTime( 2012, 12, 12, 12, 12, 12, DateTimeKind.Utc ); #endregion #region 测试清理 /// /// 测试清理 /// public void Dispose() { Time.Reset(); } #endregion #region ToDateTimeString /// /// 测试获取格式化日期时间字符串 /// [Fact] public void TestToDateTimeString() { Assert.Equal( _dateString1, _date.ToDateTimeString() ); Assert.Equal( _dateString3, _date.ToDateTimeString( true ) ); Assert.Equal( "", Convert.ToDateTimeOrNull( "" ).ToDateTimeString() ); Assert.Equal( _dateString1, _nullabledate.ToDateTimeString() ); Assert.Equal( _dateString3, _nullabledate.ToDateTimeString( true ) ); Assert.Equal( _dateString2, _utcDate.ToDateTimeString() ); Assert.Equal( _dateString4, _utcDate.ToDateTimeString( true ) ); Assert.Equal( _dateString2, _nullableUtcDate.ToDateTimeString() ); Assert.Equal( _dateString4, _nullableUtcDate.ToDateTimeString( true ) ); } /// /// 测试获取格式化日期时间字符串 - 使用Utc /// [Fact] public void TestToDateTimeString_Utc() { Time.UseUtc(); Assert.Equal( _dateString1, _date.ToDateTimeString() ); Assert.Equal( _dateString3, _date.ToDateTimeString( true ) ); Assert.Equal( "", Convert.ToDateTimeOrNull( "" ).ToDateTimeString() ); Assert.Equal( _dateString1, _nullabledate.ToDateTimeString() ); Assert.Equal( _dateString3, _nullabledate.ToDateTimeString( true ) ); Assert.Equal( _dateString2, _utcDate.ToDateTimeString() ); Assert.Equal( _dateString4, _utcDate.ToDateTimeString( true ) ); Assert.Equal( _dateString2, _nullableUtcDate.ToDateTimeString() ); Assert.Equal( _dateString4, _nullableUtcDate.ToDateTimeString( true ) ); } #endregion #region ToDateString /// /// 获取格式化日期字符串 /// [Fact] public void TestToDateString() { string date = "2012-01-02"; Assert.Equal( date, Convert.ToDateTime( date ).ToDateString() ); Assert.Equal( "", Convert.ToDateTimeOrNull( "" ).ToDateString() ); Assert.Equal( date, Convert.ToDateTimeOrNull( date ).ToDateString() ); } #endregion #region ToTimeString /// /// 获取格式化时间字符串 /// [Fact] public void TestToTimeString() { string date = "2012-01-02 11:11:11"; Assert.Equal( "11:11:11", Convert.ToDateTime( date ).ToTimeString() ); Assert.Equal( "", Convert.ToDateTimeOrNull( "" ).ToTimeString() ); Assert.Equal( "11:11:11", Convert.ToDateTimeOrNull( date ).ToTimeString() ); } #endregion #region ToMillisecondString /// /// 获取格式化毫秒字符串 /// [Fact] public void TestToMillisecondString() { string date = "2012-01-02 11:11:11.123"; Assert.Equal( date, Convert.ToDateTime( date ).ToMillisecondString() ); Assert.Equal( "", Convert.ToDateTimeOrNull( "" ).ToMillisecondString() ); Assert.Equal( date, Convert.ToDateTimeOrNull( date ).ToMillisecondString() ); } #endregion #region ToChineseDateString /// /// 获取格式化中文日期字符串 /// [Fact] public void TestToChineseDateString() { string date = "2012-01-02"; Assert.Equal( "2012年1月2日", Convert.ToDateTime( date ).ToChineseDateString() ); Assert.Equal( "2012年12月12日", Convert.ToDateTime( "2012-12-12" ).ToChineseDateString() ); Assert.Equal( "", Convert.ToDateTimeOrNull( "" ).ToChineseDateString() ); Assert.Equal( "2012年1月2日", Convert.ToDateTimeOrNull( date ).ToChineseDateString() ); } #endregion #region ToChineseDateTimeString /// /// 获取格式化中文日期时间字符串 /// [Fact] public void TestToChineseDateTimeString() { string date = "2012-01-02 11:11:11"; Assert.Equal( "2012年1月2日 11时11分11秒", Convert.ToDateTime( date ).ToChineseDateTimeString() ); Assert.Equal( "2012年12月12日 11时11分11秒", Convert.ToDateTime( "2012-12-12 11:11:11" ).ToChineseDateTimeString() ); Assert.Equal( "2012年1月2日 11时11分", Convert.ToDateTime( date ).ToChineseDateTimeString( true ) ); Assert.Equal( "", Convert.ToDateTimeOrNull( "" ).ToChineseDateTimeString() ); Assert.Equal( "2012年1月2日 11时11分11秒", Convert.ToDateTimeOrNull( date ).ToChineseDateTimeString() ); Assert.Equal( "2012年1月2日 11时11分", Convert.ToDateTimeOrNull( date ).ToChineseDateTimeString( true ) ); } #endregion #region TimeSpan_Description /// /// 测试获取时间间隔描述 /// [Fact] public void TestDescription_TimeSpan() { TimeSpan timeSpan = new DateTime( 2000, 1, 1, 1, 0, 1 ) - new DateTime( 2000, 1, 1, 1, 0, 0 ); Assert.Equal( "1秒", timeSpan.Description() ); timeSpan = new DateTime( 2000, 1, 1, 1, 1, 0 ) - new DateTime( 2000, 1, 1, 1, 0, 0 ); Assert.Equal( "1分", timeSpan.Description() ); timeSpan = new DateTime( 2000, 1, 1, 1, 0, 0 ) - new DateTime( 2000, 1, 1, 0, 0, 0 ); Assert.Equal( "1小时", timeSpan.Description() ); timeSpan = new DateTime( 2000, 1, 2, 0, 0, 0 ) - new DateTime( 2000, 1, 1, 0, 0, 0 ); Assert.Equal( "1天", timeSpan.Description() ); timeSpan = new DateTime( 2000, 1, 2, 0, 2, 0 ) - new DateTime( 2000, 1, 1, 0, 0, 0 ); Assert.Equal( "1天2分", timeSpan.Description() ); timeSpan = "2000-1-1 06:10:10.123".ToDateTime() - "2000-1-1 06:10:10.122".ToDateTime(); Assert.Equal( "1毫秒", timeSpan.Description() ); timeSpan = "2000-1-1 06:10:10.1000001".ToDateTime() - "2000-1-1 06:10:10.1000000".ToDateTime(); Assert.Equal( "0.0001毫秒", timeSpan.Description() ); } #endregion }