From 97d555c7788210d0f13834c943e834ddeb9f4e99 Mon Sep 17 00:00:00 2001 From: ruyu <bicijinlian@163.com> Date: Thu, 21 Jun 2018 09:36:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0VS=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DateTimeStudy.XUnitTest.csproj | 20 ++++ DateTimeStudy.XUnitTest/DateTimeStudyTest.cs | 73 +++++++++++ DateTimeStudy.sln | 31 +++++ DateTimeStudy/DateTimeExtensions.cs | 13 ++ DateTimeStudy/DateTimeStudy.cs | 113 ++++++++++++++++++ DateTimeStudy/DateTimeStudy.csproj | 7 ++ 6 files changed, 257 insertions(+) create mode 100644 DateTimeStudy.XUnitTest/DateTimeStudy.XUnitTest.csproj create mode 100644 DateTimeStudy.XUnitTest/DateTimeStudyTest.cs create mode 100644 DateTimeStudy.sln create mode 100644 DateTimeStudy/DateTimeExtensions.cs create mode 100644 DateTimeStudy/DateTimeStudy.cs create mode 100644 DateTimeStudy/DateTimeStudy.csproj 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 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>netcoreapp2.0</TargetFramework> + + <IsPackable>false</IsPackable> + </PropertyGroup> + + <ItemGroup> + <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.6.0" /> + <PackageReference Include="xunit" Version="2.3.1" /> + <PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" /> + <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" /> + </ItemGroup> + + <ItemGroup> + <ProjectReference Include="..\DateTimeStudy\DateTimeStudy.csproj" /> + </ItemGroup> + +</Project> 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 + { + /// <summary> + /// ���캯������Ԫ����ǰ���� + /// </summary> + 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<DateTime>(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); + } + + /// <summary> + /// �൱��������������Ԫ������β���� + /// </summary> + 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 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DateTimeStudy +{ + /// <summary> + /// DateTime扩展类 + /// </summary> + 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 @@ +using System; + +namespace DateTimeStudy +{ + /// <summary> + /// DateTime学习 + /// 全球时间 + /// </summary> + /// <example>http://www.cnblogs.com/artech/archive/2010/09/04/InsideDateTime_01.html</example> + public class DateTimeStudy + { + #region 1、你是否知道System.DateTimeKind + + /* + 说明:System.DateTime类型不是class,而是一个struct,换言之它是值类型,而不是引用类型。 + DateTime处理包含我们熟悉的年、月、日、时、分、秒和毫秒等基本属性之外,还具有一个重要的表示时间类型(Kind)的属性:Kind。 + 该属性的类型为System.DateTimeKind枚举。DateTimeKind定义如下,它具有三个枚举值:Unspecified、Utc和Local。 + 后两个分别表示UTC(格林威治时间)和本地时间。Unspecified顾名思义,就是尚未指定具体类型,这是默认值。 + */ + /* DateTimeKind 代码 + [Serializable, ComVisible(true)] + public enum DateTimeKind + { + Unspecified, + Utc, + Local + } + */ + + /* + 在DateTime类型中,表示时间类型的Kind属性是只读的,只能在构造函数中指定。 + 虽然,Kind属性是只读的,但是我们还用另外一中设定Kind的方式,那就是调用DateTime的静态方法的SpecifyKind。该方法不会真正去修改一个现有DateTime对象的Kind属性,而是会重新创建一个新的DateTime对象。方法返回的对象具有和指定时间相同的基本属性(年、月、日、时、分、秒和毫秒),该DateTime对象具有你指定的DateTimeKind值。 + */ + + /// <summary> + /// 创建时间 + /// 无参数 + /// </summary> + public DateTime CreateDateTime() + { + return new DateTime(); + } + + /// <summary> + /// 创建时间 + /// ticks + /// </summary> + public DateTime CreateDateTime(long ticks) + { + return new DateTime(ticks); + } + + /// <summary> + /// 创建时间 + /// ticks和DateTimeKind + /// </summary> + public DateTime CreateDateTime(long ticks, DateTimeKind kind) + { + return new DateTime(ticks,kind); + } + + /// <summary> + /// 创建时间 + /// 年 月 日 时 分 秒 + /// </summary> + public DateTime CreateDateTime(int year, int month, int day, int hour, int minute, int second) + { + return new DateTime(year, month, day, hour, minute, second); + } + + /// <summary> + /// 创建时间 + /// 年 月 日 时 分 秒 DateTimeKind + /// </summary> + 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); + } + + /// <summary> + /// 创建时间 + /// 年 月 日 时 分 秒 豪秒 + /// </summary> + 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); + } + + /// <summary> + /// 创建时间 + /// 年 月 日 时 分 秒 豪秒 DateTimeKind + /// </summary> + 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、几个常用DateTime对象的DateTimeKind + #endregion + + #region 3、DateTime的对等性问题 + #endregion + + #region 4、通过DateTime类型的ToLocalTime和ToUniversalTime方法实现UTC和Local的转换 + #endregion + + #region 5、通过TimeZoneInfo实现Utc和Local的转换 + #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 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>netstandard2.0</TargetFramework> + </PropertyGroup> + +</Project>