master
bicijinlian 5 years ago
parent 9ea56e5acb
commit e256459967

@ -1,19 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;
using DateTimeStudy;
namespace DateTimeStudy.XUnitTest
{
public class DateTimeExtensionsTest
{
[Fact]
public void Test()
{
var aa = DateTime.Now.ToUtcTimestamp();
var cc = aa.ToLocalTime();
}
}
}

@ -1,73 +0,0 @@
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()
{
}
}
}

@ -1,11 +1,11 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27428.2037
VisualStudioVersion = 15.0.27703.2000
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DateTimeStudy", "DateTimeStudy\DateTimeStudy.csproj", "{98679A2E-DBD2-4114-9708-64C5D89DA2B3}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DateTimeStudy", "DateTimeStudy\DateTimeStudy.csproj", "{FD1888B3-85CE-4C01-AB70-AC260C5F5AE3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DateTimeStudy.XUnitTest", "DateTimeStudy.XUnitTest\DateTimeStudy.XUnitTest.csproj", "{38E899C0-095E-423A-B744-2806251E7C8D}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DateTimeStudyTest", "DateTimeStudyTest\DateTimeStudyTest.csproj", "{034908E5-4A57-446F-B9DD-F9388ADFE019}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -13,19 +13,19 @@ Global
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
{FD1888B3-85CE-4C01-AB70-AC260C5F5AE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FD1888B3-85CE-4C01-AB70-AC260C5F5AE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FD1888B3-85CE-4C01-AB70-AC260C5F5AE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FD1888B3-85CE-4C01-AB70-AC260C5F5AE3}.Release|Any CPU.Build.0 = Release|Any CPU
{034908E5-4A57-446F-B9DD-F9388ADFE019}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{034908E5-4A57-446F-B9DD-F9388ADFE019}.Debug|Any CPU.Build.0 = Debug|Any CPU
{034908E5-4A57-446F-B9DD-F9388ADFE019}.Release|Any CPU.ActiveCfg = Release|Any CPU
{034908E5-4A57-446F-B9DD-F9388ADFE019}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {EA58FCD3-3D43-46F8-8245-F8D16443AE8F}
SolutionGuid = {4E842325-6DCE-4BA8-81B7-A71856A669DE}
EndGlobalSection
EndGlobal

@ -1,33 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace DateTimeStudy
{
/// <summary>
/// DateTime扩展类
/// </summary>
public static class DateTimeExtensions
{
/// <summary>
/// 以毫秒为单位的UTC时间戳
/// </summary>
public static long ToUtcTimestamp(this DateTime sourceDate)
{
var utcTimeStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return (sourceDate - utcTimeStart).Ticks;
}
/// <summary>
/// 毫秒单位UTC时间戳转当地时间
/// </summary>
public static DateTime ToLocalTime(this long utcTimestamp)
{
DateTime utcTimeStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var timeSpan = new TimeSpan(utcTimestamp);
return utcTimeStart.Add(timeSpan).ToLocalTime();
}
}
}

@ -0,0 +1,47 @@
using System;
namespace DateTimeStudy
{
/// <summary>
/// DateTimeOffset 学习
/// </summary>
public static class DateTimeOffsetStudy
{
#region 创建
/// <summary>
/// 无参默认
/// </summary>
public static DateTimeOffset CreateDateTimeOffset()
{
DateTimeOffset myTime = new DateTimeOffset();
return DateTimeOffset.Now;
}
/// <summary>
/// DateTime 做参数
/// </summary>
public static DateTimeOffset CreateDateTimeOffset(DateTime sourceDateTime)
{
DateTimeOffset myTime = new DateTimeOffset(sourceDateTime);
return DateTimeOffset.Now;
}
#endregion
#region 获取常见时间
/// <summary>
/// 获取当前时间
/// </summary>
/// <returns></returns>
public static DateTimeOffset GetNow()
{
return DateTimeOffset.Now;
}
#endregion
}
}

@ -1,134 +0,0 @@
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.DateTimeclassstruct
DateTimeKindKind
System.DateTimeKindDateTimeKindUnspecifiedUtcLocal
UTCUnspecified
*/
/* DateTimeKind
[Serializable, ComVisible(true)]
public enum DateTimeKind
{
Unspecified,
Utc,
Local
}
*/
/*
DateTimeKind
KindKindDateTimeSpecifyKindDateTimeKindDateTimeDateTimeDateTimeKind
*/
/// <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的转换
/// <summary>
/// 获取当前时间的UTC时间戳(
/// 单位:毫秒
/// </summary>
public static long ToUtcTimestamp(DateTime sourceDate)
{
var startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return (sourceDate - startTime).Ticks;
}
/// <summary>
/// 毫秒单位UTC时间戳转当地时间
/// </summary>
public static DateTime UtcTimestamp2DateTime(long utcTimestamp)
{
DateTime utcStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var timeSpan = new TimeSpan(utcTimestamp);
return utcStart.Add(timeSpan).ToLocalTime();
}
#endregion
#region 5、通过TimeZoneInfo实现Utc和Local的转换
#endregion
}
}

@ -0,0 +1,25 @@
using System;
using DateTimeStudy;
using Xunit;
namespace DateTimeStudyTest
{
public class DateTimeOffsetStudyTest
{
[Fact]
public void CreateDateTimeOffsetTest()
{
var offsetTime = DateTimeOffsetStudy.CreateDateTimeOffset();
var currentDateTime = DateTime.Now;
Assert.Equal(offsetTime.Date,currentDateTime.Date);
var offsetTimespan = offsetTime.Offset;
Assert.Equal(8,offsetTimespan.Hours);
TimeZoneInfo palmer = TimeZoneInfo.CreateCustomTimeZone("1", offsetTimespan, "DisplayName", "UTC8", "", new TimeZoneInfo.AdjustmentRule[]{});
Assert.Equal(DateTimeKind.Unspecified, offsetTime.Date.Kind);
}
}
}

@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.6.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.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" />
Loading…
Cancel
Save