diff --git a/DateTimeStudy.XUnitTest/DateTimeStudy.XUnitTest.csproj b/DateTimeStudy.XUnitTest/DateTimeStudy.XUnitTest.csproj new file mode 100644 index 0000000..24a751b --- /dev/null +++ b/DateTimeStudy.XUnitTest/DateTimeStudy.XUnitTest.csproj @@ -0,0 +1,20 @@ + + + + netcoreapp2.0 + + false + + + + + + + + + + + + + + diff --git a/DateTimeStudy.XUnitTest/DateTimeStudyTest.cs b/DateTimeStudy.XUnitTest/DateTimeStudyTest.cs new file mode 100644 index 0000000..89bb769 --- /dev/null +++ b/DateTimeStudy.XUnitTest/DateTimeStudyTest.cs @@ -0,0 +1,73 @@ +using System; +using Xunit; + +namespace DateTimeStudy.XUnitTest +{ + public class DateTimeStudyTest:IDisposable + { + /// + /// 构造函数:单元测试前的准备 + /// + public DateTimeStudyTest() + { + + } + + [Fact] + public void Test1() + { + Assert.Equal(1, 1.0); + } + + [Fact] + public void CreateDateTimeDefaultTest() + { + DateTimeStudy sudy = new DateTimeStudy(); + //无参时间:0001年1月1日 0时 0分 0秒 + var time = sudy.CreateDateTime(); + Assert.True(time.Year==1 && time.Month==1 && time.Day==1 && time.Hour==0 && time.Minute==0 && time.Second==0 && time.Millisecond==0); + Assert.True(time.Kind == DateTimeKind.Unspecified); + } + + [Fact] + public void CreateDateTime4TicksTest() + { + DateTimeStudy sudy = new DateTimeStudy(); + //UTC时间:2018-01-01 + long ticks = 636503616000000000; + var time = sudy.CreateDateTime(ticks); + Assert.True(time.Year == 2018 && time.Month == 1 && time.Day == 1 && time.Hour == 0 && time.Minute == 0 && time.Second == 0 && time.Millisecond == 0); + Assert.True(new DateTime(2018, 1, 1, 0, 0, 0, DateTimeKind.Local) == time); + Assert.True(time.Kind == DateTimeKind.Unspecified); + } + + [Fact] + public void CreateDateTimeTest4() + { + DateTimeStudy sudy = new DateTimeStudy(); + //UTC时间:2018-01-01 + long ticks = 636503616000000000; + var time = sudy.CreateDateTime(ticks, DateTimeKind.Utc); + var time2 = sudy.CreateDateTime(ticks, DateTimeKind.Local); + + //这很奇怪:竟然相等 + Assert.Equal(time, time2); + Assert.True(time.Year == 2018 && time.Month == 1 && time.Day == 1 && time.Hour == 0 && time.Minute == 0 && time.Second == 0 && time.Millisecond == 0); + Assert.True(time2.Year == 2018 && time2.Month == 1 && time2.Day == 1 && time2.Hour == 0 && time2.Minute == 0 && time2.Second == 0 && time2.Millisecond == 0); + Assert.True(new DateTime(2018, 1, 1, 0, 0, 0, DateTimeKind.Local) == time); + Assert.True(new DateTime(2018, 1, 1, 0, 0, 0, DateTimeKind.Utc) == time); + Assert.True(new DateTime(2018, 1, 1, 0, 0, 0, DateTimeKind.Local) == time2); + Assert.True(new DateTime(2018, 1, 1, 0, 0, 0, DateTimeKind.Utc) == time2); + Assert.True(time.Kind == DateTimeKind.Utc); + Assert.True(time2.Kind == DateTimeKind.Local); + } + + /// + /// 相当于析构函数:单元测试收尾清理 + /// + public void Dispose() + { + + } + } +} diff --git a/DateTimeStudy.sln b/DateTimeStudy.sln new file mode 100644 index 0000000..a77261b --- /dev/null +++ b/DateTimeStudy.sln @@ -0,0 +1,31 @@ +锘 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27428.2037 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DateTimeStudy", "DateTimeStudy\DateTimeStudy.csproj", "{98679A2E-DBD2-4114-9708-64C5D89DA2B3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DateTimeStudy.XUnitTest", "DateTimeStudy.XUnitTest\DateTimeStudy.XUnitTest.csproj", "{38E899C0-095E-423A-B744-2806251E7C8D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {98679A2E-DBD2-4114-9708-64C5D89DA2B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {98679A2E-DBD2-4114-9708-64C5D89DA2B3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {98679A2E-DBD2-4114-9708-64C5D89DA2B3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {98679A2E-DBD2-4114-9708-64C5D89DA2B3}.Release|Any CPU.Build.0 = Release|Any CPU + {38E899C0-095E-423A-B744-2806251E7C8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38E899C0-095E-423A-B744-2806251E7C8D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38E899C0-095E-423A-B744-2806251E7C8D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38E899C0-095E-423A-B744-2806251E7C8D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EA58FCD3-3D43-46F8-8245-F8D16443AE8F} + EndGlobalSection +EndGlobal diff --git a/DateTimeStudy/DateTimeExtensions.cs b/DateTimeStudy/DateTimeExtensions.cs new file mode 100644 index 0000000..22de52f --- /dev/null +++ b/DateTimeStudy/DateTimeExtensions.cs @@ -0,0 +1,13 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Text; + +namespace DateTimeStudy +{ + /// + /// DateTime鎵╁睍绫 + /// + public class DateTimeExtensions + { + } +} diff --git a/DateTimeStudy/DateTimeStudy.cs b/DateTimeStudy/DateTimeStudy.cs new file mode 100644 index 0000000..2ba57b3 --- /dev/null +++ b/DateTimeStudy/DateTimeStudy.cs @@ -0,0 +1,113 @@ +锘縰sing System; + +namespace DateTimeStudy +{ + /// + /// DateTime瀛︿範 + /// 鍏ㄧ悆鏃堕棿 + /// + /// http://www.cnblogs.com/artech/archive/2010/09/04/InsideDateTime_01.html + public class DateTimeStudy + { + #region 1銆佷綘鏄惁鐭ラ亾System.DateTimeKind + + /* + 璇存槑锛歋ystem.DateTime绫诲瀷涓嶆槸class锛岃屾槸涓涓猻truct锛屾崲瑷涔嬪畠鏄肩被鍨嬶紝鑰屼笉鏄紩鐢ㄧ被鍨嬨 + DateTime澶勭悊鍖呭惈鎴戜滑鐔熸倝鐨勫勾銆佹湀銆佹棩銆佹椂銆佸垎銆佺鍜屾绉掔瓑鍩烘湰灞炴т箣澶栵紝杩樺叿鏈変竴涓噸瑕佺殑琛ㄧず鏃堕棿绫诲瀷锛圞ind锛夌殑灞炴э細Kind銆 + 璇ュ睘鎬х殑绫诲瀷涓篠ystem.DateTimeKind鏋氫妇銆侱ateTimeKind瀹氫箟濡備笅锛屽畠鍏锋湁涓変釜鏋氫妇鍊硷細Unspecified銆乁tc鍜孡ocal銆 + 鍚庝袱涓垎鍒〃绀篣TC锛堟牸鏋楀▉娌绘椂闂达級鍜屾湰鍦版椂闂淬俇nspecified椤惧悕鎬濅箟锛屽氨鏄皻鏈寚瀹氬叿浣撶被鍨嬶紝杩欐槸榛樿鍊笺 + */ + /* DateTimeKind 浠g爜 + [Serializable, ComVisible(true)] + public enum DateTimeKind + { + Unspecified, + Utc, + Local + } + */ + + /* + 鍦―ateTime绫诲瀷涓紝琛ㄧず鏃堕棿绫诲瀷鐨凨ind灞炴ф槸鍙鐨勶紝鍙兘鍦ㄦ瀯閫犲嚱鏁颁腑鎸囧畾銆 + 铏界劧锛孠ind灞炴ф槸鍙鐨勶紝浣嗘槸鎴戜滑杩樼敤鍙﹀涓涓瀹欿ind鐨勬柟寮忥紝閭e氨鏄皟鐢―ateTime鐨勯潤鎬佹柟娉曠殑SpecifyKind銆傝鏂规硶涓嶄細鐪熸鍘讳慨鏀逛竴涓幇鏈塂ateTime瀵硅薄鐨凨ind灞炴э紝鑰屾槸浼氶噸鏂板垱寤轰竴涓柊鐨凞ateTime瀵硅薄銆傛柟娉曡繑鍥炵殑瀵硅薄鍏锋湁鍜屾寚瀹氭椂闂寸浉鍚岀殑鍩烘湰灞炴э紙骞淬佹湀銆佹棩銆佹椂銆佸垎銆佺鍜屾绉掞級锛岃DateTime瀵硅薄鍏锋湁浣犳寚瀹氱殑DateTimeKind鍊笺 + */ + + /// + /// 鍒涘缓鏃堕棿 + /// 鏃犲弬鏁 + /// + public DateTime CreateDateTime() + { + return new DateTime(); + } + + /// + /// 鍒涘缓鏃堕棿 + /// ticks + /// + public DateTime CreateDateTime(long ticks) + { + return new DateTime(ticks); + } + + /// + /// 鍒涘缓鏃堕棿 + /// ticks鍜孌ateTimeKind + /// + public DateTime CreateDateTime(long ticks, DateTimeKind kind) + { + return new DateTime(ticks,kind); + } + + /// + /// 鍒涘缓鏃堕棿 + /// 骞 鏈 鏃 鏃 鍒 绉 + /// + public DateTime CreateDateTime(int year, int month, int day, int hour, int minute, int second) + { + return new DateTime(year, month, day, hour, minute, second); + } + + /// + /// 鍒涘缓鏃堕棿 + /// 骞 鏈 鏃 鏃 鍒 绉 DateTimeKind + /// + public DateTime CreateDateTime(int year, int month, int day, int hour, int minute, int second, DateTimeKind kind) + { + return new DateTime(year, month, day, hour, minute, second, kind); + } + + /// + /// 鍒涘缓鏃堕棿 + /// 骞 鏈 鏃 鏃 鍒 绉 璞 + /// + public DateTime CreateDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond) + { + return new DateTime(year, month, day, hour, minute, second, millisecond); + } + + /// + /// 鍒涘缓鏃堕棿 + /// 骞 鏈 鏃 鏃 鍒 绉 璞 DateTimeKind + /// + public DateTime CreateDateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, DateTimeKind kind) + { + return new DateTime(year, month, day, hour, minute, second, millisecond, kind); + } + + + #endregion + + #region 2銆佸嚑涓父鐢―ateTime瀵硅薄鐨凞ateTimeKind + #endregion + + #region 3銆丏ateTime鐨勫绛夋ч棶棰 + #endregion + + #region 4銆侀氳繃DateTime绫诲瀷鐨凾oLocalTime鍜孴oUniversalTime鏂规硶瀹炵幇UTC鍜孡ocal鐨勮浆鎹 + #endregion + + #region 5銆侀氳繃TimeZoneInfo瀹炵幇Utc鍜孡ocal鐨勮浆鎹 + #endregion + } +} diff --git a/DateTimeStudy/DateTimeStudy.csproj b/DateTimeStudy/DateTimeStudy.csproj new file mode 100644 index 0000000..9f5c4f4 --- /dev/null +++ b/DateTimeStudy/DateTimeStudy.csproj @@ -0,0 +1,7 @@ + + + + netstandard2.0 + + +