Bladeren bron

增加时间段计算工具

懒得勤快 5 jaren geleden
bovenliggende
commit
78584bbdfe

+ 3 - 3
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -7,7 +7,7 @@
     <LangVersion>8.0</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
-    <Version>2.3.1.1</Version>
+    <Version>2.3.1.3</Version>
     <Authors>懒得勤快</Authors>
     <Description>Masuit.Tools基础公共库</Description>
     <Copyright>懒得勤快,长空X</Copyright>
@@ -20,9 +20,9 @@
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
-    <FileVersion>2.3.1.1</FileVersion>
+    <FileVersion>2.3.1.3</FileVersion>
     <Company>masuit.com</Company>
-    <AssemblyVersion>2.3.1.1</AssemblyVersion>
+    <AssemblyVersion>2.3.1.3</AssemblyVersion>
     <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
   </PropertyGroup>
 

+ 159 - 0
Masuit.Tools.Abstractions/Models/DateTimeRange.cs

@@ -0,0 +1,159 @@
+using Masuit.Tools.DateTimeExt;
+using System;
+using System.Collections.Generic;
+
+namespace Masuit.Tools.Models
+{
+    /// <summary>
+    /// 时间段
+    /// </summary>
+    public class DateTimeRange
+    {
+        public DateTimeRange(DateTime start, DateTime end)
+        {
+            if (start > end)
+            {
+                throw new Exception("开始时间不能大于结束时间");
+            }
+
+            Start = start;
+            End = end;
+        }
+
+        /// <summary>
+        /// 起始时间
+        /// </summary>
+        public DateTime Start { get; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public DateTime End { get; }
+
+        /// <summary>
+        /// 是否相交
+        /// </summary>
+        /// <param name="start"></param>
+        /// <param name="end"></param>
+        /// <returns></returns>
+        public bool HasIntersect(DateTime start, DateTime end)
+        {
+            return HasIntersect(new DateTimeRange(start, end));
+        }
+
+        /// <summary>
+        /// 是否相交
+        /// </summary>
+        /// <param name="range"></param>
+        /// <returns></returns>
+        public bool HasIntersect(DateTimeRange range)
+        {
+            return Start.In(range.Start, range.End) || End.In(range.Start, range.End);
+        }
+
+        /// <summary>
+        /// 相交时间段
+        /// </summary>
+        /// <param name="range"></param>
+        /// <returns></returns>
+        public (bool intersected, DateTimeRange range) Intersect(DateTimeRange range)
+        {
+            if (HasIntersect(range.Start, range.End))
+            {
+                var list = new List<DateTime>() { Start, range.Start, End, range.End };
+                list.Sort();
+                return (true, new DateTimeRange(list[1], list[2]));
+            }
+
+            return (false, null);
+        }
+
+        /// <summary>
+        /// 相交时间段
+        /// </summary>
+        /// <param name="start"></param>
+        /// <param name="end"></param>
+        /// <returns></returns>
+        public (bool intersected, DateTimeRange range) Intersect(DateTime start, DateTime end)
+        {
+            return Intersect(new DateTimeRange(start, end));
+        }
+
+        /// <summary>
+        /// 是否包含时间段
+        /// </summary>
+        /// <param name="range"></param>
+        /// <returns></returns>
+        public bool Contains(DateTimeRange range)
+        {
+            return range.Start.In(Start, End) && range.End.In(Start, End);
+        }
+
+        /// <summary>
+        /// 是否包含时间段
+        /// </summary>
+        /// <param name="start"></param>
+        /// <param name="end"></param>
+        /// <returns></returns>
+        public bool Contains(DateTime start, DateTime end)
+        {
+            return Contains(new DateTimeRange(start, end));
+        }
+
+        /// <summary>
+        /// 是否在时间段内
+        /// </summary>
+        /// <param name="range"></param>
+        /// <returns></returns>
+        public bool In(DateTimeRange range)
+        {
+            return Start.In(range.Start, range.End) && End.In(range.Start, range.End);
+        }
+
+        /// <summary>
+        /// 是否在时间段内
+        /// </summary>
+        /// <param name="start"></param>
+        /// <param name="end"></param>
+        /// <returns></returns>
+        public bool In(DateTime start, DateTime end)
+        {
+            return In(new DateTimeRange(start, end));
+        }
+
+        /// <summary>
+        /// 合并时间段
+        /// </summary>
+        /// <param name="range"></param>
+        /// <returns></returns>
+        public DateTimeRange Union(DateTimeRange range)
+        {
+            if (HasIntersect(range))
+            {
+                var list = new List<DateTime>() { Start, range.Start, End, range.End };
+                list.Sort();
+                return new DateTimeRange(list[0], list[3]);
+            }
+
+            throw new Exception("不相交的时间段不能合并");
+        }
+
+        /// <summary>
+        /// 合并时间段
+        /// </summary>
+        /// <param name="start"></param>
+        /// <param name="end"></param>
+        /// <returns></returns>
+        public DateTimeRange Union(DateTime start, DateTime end)
+        {
+            return Union(new DateTimeRange(start, end));
+        }
+
+        /// <summary>返回一个表示当前对象的 string。</summary>
+        /// <returns>表示当前对象的字符串。</returns>
+        public override string ToString()
+        {
+            return $"{Start:yyyy-MM-dd HH:mm:ss}~{End:yyyy-MM-dd HH:mm:ss}";
+        }
+    }
+}

+ 3 - 3
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -21,10 +21,10 @@
     <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>2.3.1.1</Version>
-    <FileVersion>2.3.1.1</FileVersion>
+    <Version>2.3.1.3</Version>
+    <FileVersion>2.3.1.3</FileVersion>
     <Company>masuit.com</Company>
-    <AssemblyVersion>2.3.1.1</AssemblyVersion>
+    <AssemblyVersion>2.3.1.3</AssemblyVersion>
     <Authors>懒得勤快X</Authors>
     <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
   </PropertyGroup>

BIN
Masuit.Tools/Properties/AssemblyInfo.cs


+ 2 - 2
Masuit.Tools/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net</id>
     <!--*-->
-    <version>2.3.1.1</version>
+    <version>2.3.1.3</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>masuit.com</authors>
@@ -22,7 +22,7 @@
     <copyright>Copyright ©  懒得勤快</copyright>
     <tags>Tools</tags>
     <dependencies>
-      <dependency id="Masuit.Tools.Abstractions" version="2.3.1.1" />
+      <dependency id="Masuit.Tools.Abstractions" version="2.3.1.3" />
     </dependencies>
   </metadata>
 </package>