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>