翼度科技»论坛 编程开发 .net 查看内容

C#中的时间类

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
DateTime类

DateTime类是C#中最常用的时间类之一,它表示一个日期和时间。可以使用DateTime.Now属性获取当前时间,也可以使用DateTime.Parse方法将字符串转换为DateTime对象。
  1. // 获取当前时间
  2. DateTime now = DateTime.Now;
  3. // 将字符串转换为DateTime对象
  4. DateTime dateTime = DateTime.Parse("2022-01-01 12:00:00");
  5. // 获取当前时间的年份
  6. int year = now.Year;
  7. // 获取当前时间的月份
  8. int month = now.Month;
  9. // 获取当前时间的日期
  10. int day = now.Day;
  11. // 获取当前时间的小时数
  12. int hour = now.Hour;
  13. // 获取当前时间的分钟数
  14. int minute = now.Minute;
  15. // 获取当前时间的秒数
  16. int second = now.Second;
  17. // 获取当前时间的毫秒数
  18. int millisecond = now.Millisecond;
复制代码
DateTime类还提供了一些常用的方法和属性,例如:

  • DateTime.AddDays(double value):将当前DateTime对象的日期加上指定的天数。
  • DateTime.AddHours(double value):将当前DateTime对象的时间加上指定的小时数。
  • DateTime.AddMinutes(double value):将当前DateTime对象的时间加上指定的分钟数。
  • DateTime.AddSeconds(double value):将当前DateTime对象的时间加上指定的秒数。
  • DateTime.Year:获取当前DateTime对象的年份。
  • DateTime.Month:获取当前DateTime对象的月份。
  • DateTime.Day:获取当前DateTime对象的日期。
  • DateTime.Hour:获取当前DateTime对象的小时数。
  • DateTime.Minute:获取当前DateTime对象的分钟数。
  • DateTime.Second:获取当前DateTime对象的秒数。
TimeSpan类

TimeSpan类表示时间间隔,可以用来计算两个日期之间的时间差。可以使用TimeSpan.FromDays、TimeSpan.FromHours、TimeSpan.FromMinutes、TimeSpan.FromSeconds等方法创建TimeSpan对象。
  1. // 创建一个表示1天的TimeSpan对象
  2. TimeSpan oneDay = TimeSpan.FromDays(1);
  3. // 创建一个表示2小时的TimeSpan对象
  4. TimeSpan twoHours = TimeSpan.FromHours(2);
  5. // 创建一个表示30分钟的TimeSpan对象
  6. TimeSpan thirtyMinutes = TimeSpan.FromMinutes(30);
  7. // 创建一个表示10秒的TimeSpan对象
  8. TimeSpan tenSeconds = TimeSpan.FromSeconds(10);
复制代码
TimeSpan类还提供了一些常用的方法和属性,例如:

  • TimeSpan.TotalDays:获取TimeSpan对象表示的总天数。
  • TimeSpan.TotalHours:获取TimeSpan对象表示的总小时数。
  • TimeSpan.TotalMinutes:获取TimeSpan对象表示的总分钟数。
  • TimeSpan.TotalSeconds:获取TimeSpan对象表示的总秒数。
DateTimeOffset类

DateTimeOffset类表示一个日期和时间,同时包含时区信息。可以使用DateTimeOffset.Now属性获取当前时间,也可以使用DateTimeOffset.Parse方法将字符串转换为DateTimeOffset对象。
  1. // 获取当前时间
  2. DateTimeOffset now = DateTimeOffset.Now
  3. // 将字符串转换为DateTimeOffset对象
  4. DateTimeOffset dateTimeOffset = DateTimeOffset.Parse("2022-01-01 12:00:00 +08:00");
复制代码
DateTimeOffset类还提供了一些常用的方法和属性,例如:

  • DateTimeOffset.ToLocalTime():将当前DateTimeOffset对象转换为本地时间。
  • DateTimeOffset.ToUniversalTime():将当前DateTimeOffset对象转换为协调世界时(UTC)时间。
静态类的封装
  1. using System;
  2. namespace ToolBox.DateTimeTool
  3. {
  4.     public static class DateTimeExtend
  5.     {
  6.         /// <summary>
  7.         /// 获取本日开始时间(0点0分0秒)
  8.         /// </summary>
  9.         /// <param name="dateTime"></param>
  10.         /// <returns></returns>
  11.         public static DateTime GetDayStart(this DateTime dateTime)
  12.         {
  13.             return dateTime.Date;
  14.         }
  15.         /// <summary>
  16.         /// 获取本日结束时间(23点59分59秒)
  17.         /// </summary>
  18.         /// <param name="dateTime"></param>
  19.         /// <returns></returns>
  20.         public static DateTime GetDayEnd(this DateTime dateTime)
  21.         {
  22.             return dateTime.Date.AddDays(1).AddMilliseconds(-1);
  23.         }
  24.         /// <summary>
  25.         /// 获取本周开始时间
  26.         /// </summary>
  27.         /// <param name="dateTime"></param>
  28.         /// <returns></returns>
  29.         public static DateTime GetWeekStart(this DateTime dateTime)
  30.         {
  31.             return dateTime.AddDays(-(int)dateTime.DayOfWeek + 1).GetDayStart();
  32.         }
  33.         /// <summary>
  34.         /// 获取本周结束时间
  35.         /// </summary>
  36.         /// <param name="dateTime"></param>
  37.         /// <returns></returns>
  38.         public static DateTime GetWeekEnd(this DateTime dateTime)
  39.         {
  40.             return dateTime.AddDays(7 - (int)dateTime.DayOfWeek).GetDayEnd();
  41.         }
  42.         /// <summary>
  43.         /// 获取本月开始时间
  44.         /// </summary>
  45.         /// <param name="dateTime"></param>
  46.         /// <returns></returns>
  47.         public static DateTime GetMonthStart(this DateTime dateTime)
  48.         {
  49.             return new DateTime(dateTime.Year, dateTime.Month, 1, 0, 0, 0, 0);
  50.         }
  51.         /// <summary>
  52.         /// 获取本月结束时间
  53.         /// </summary>
  54.         /// <param name="dateTime"></param>
  55.         /// <returns></returns>
  56.         public static DateTime GetMonthEnd(this DateTime dateTime)
  57.         {
  58.             return GetMonthStart(dateTime).AddMonths(1).AddMilliseconds(-1);
  59.         }
  60.         /// <summary>
  61.         /// 获取本季度开始时间
  62.         /// </summary>
  63.         /// <param name="dateTime"></param>
  64.         /// <returns></returns>
  65.         public static DateTime GetSeasonStart(this DateTime dateTime)
  66.         {
  67.             var time = dateTime.AddMonths(0 - ((dateTime.Month - 1) % 3));
  68.             return DateTime.Parse(time.AddDays(-time.Day + 1).ToString("yyyy/MM/dd 00:00:00"));
  69.         }
  70.         /// <summary>
  71.         /// 获取本季度结束时间
  72.         /// </summary>
  73.         /// <param name="dateTime"></param>
  74.         /// <returns></returns>
  75.         public static DateTime GetSeasonEnd(this DateTime dateTime)
  76.         {
  77.             var time = dateTime.AddMonths((3 - ((dateTime.Month - 1) % 3) - 1));
  78.             return DateTime.Parse(time.AddMonths(1).AddDays(-time.AddMonths(1).Day + 1).AddDays(-1).ToString("yyyy/MM/dd 23:59:59"));
  79.         }
  80.         /// <summary>
  81.         /// 获取本年开始时间
  82.         /// </summary>
  83.         /// <param name="dateTime"></param>
  84.         /// <returns></returns>
  85.         public static DateTime GetYearStart(this DateTime dateTime)
  86.         {
  87.             return DateTime.Parse(dateTime.AddDays(-dateTime.DayOfYear + 1).ToString("yyyy/MM/dd 00:00:00"));
  88.         }
  89.         /// <summary>
  90.         /// 获取本年结束时间
  91.         /// </summary>
  92.         /// <param name="dateTime"></param>
  93.         /// <returns></returns>
  94.         public static DateTime GetYearEnd(this DateTime dateTime)
  95.         {
  96.             var time2 = dateTime.AddYears(1);
  97.             return DateTime.Parse(time2.AddDays(-time2.DayOfYear).ToString("yyyy/MM/dd 23:59:59"));
  98.         }
  99.         /// <summary>
  100.         /// 北京时间转换成unix时间戳(10位/秒)
  101.         /// </summary>
  102.         /// <param name="dateTime"></param>
  103.         /// <returns></returns>
  104.         public static long BeijingTimeToUnixTimeStamp10(this DateTime dateTime)
  105.         {
  106.             return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds;
  107.         }
  108.         /// <summary>
  109.         /// 格林威治时间转换成unix时间戳(10位/秒)
  110.         /// </summary>
  111.         /// <param name="dateTime"></param>
  112.         /// <returns></returns>
  113.         public static long UtcTimeToUnixTimeStamp10(this DateTime dateTime)
  114.         {
  115.             return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
  116.         }
  117.         /// <summary>
  118.         /// 北京时间转换成unix时间戳(13位/毫秒)
  119.         /// </summary>
  120.         /// <param name="dateTime"></param>
  121.         /// <returns></returns>
  122.         public static long BeijingTimeToUnixTimeStamp13(this DateTime dateTime)
  123.         {
  124.             return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalMilliseconds;
  125.         }
  126.         /// <summary>
  127.         /// 格林威治时间转换成unix时间戳(13位/毫秒)
  128.         /// </summary>
  129.         /// <param name="dateTime"></param>
  130.         /// <returns></returns>
  131.         public static long UtcTimeToUnixTimeStamp13(this DateTime dateTime)
  132.         {
  133.             return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds;
  134.         }
  135.         /// <summary>
  136.         /// 10位unix时间戳转换成北京时间
  137.         /// </summary>
  138.         /// <param name="dateTime"></param>
  139.         /// <returns></returns>
  140.         public static DateTime UnixTimeStamp10ToBeijingTime(this long unixTimeStamp)
  141.         {
  142.             return new DateTime(1970, 1, 1, 8, 0, 0).AddSeconds(unixTimeStamp);
  143.         }
  144.         /// <summary>
  145.         /// 10位unix时间戳转换成格林威治
  146.         /// </summary>
  147.         /// <param name="dateTime"></param>
  148.         /// <returns></returns>
  149.         public static DateTime UnixTimeStamp10ToUtcTime(this long unixTimeStamp)
  150.         {
  151.             return new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(unixTimeStamp);
  152.         }
  153.         /// <summary>
  154.         /// 13位unix时间戳转换成北京时间
  155.         /// </summary>
  156.         /// <param name="dateTime"></param>
  157.         /// <returns></returns>
  158.         public static DateTime UnixTimeStamp13ToBeijingTime(this long unixTimeStamp)
  159.         {
  160.             return new DateTime(1970, 1, 1, 8, 0, 0).AddMilliseconds(unixTimeStamp);
  161.         }
  162.         /// <summary>
  163.         /// 13位unix时间戳转换成格林威治
  164.         /// </summary>
  165.         /// <param name="dateTime"></param>
  166.         /// <returns></returns>
  167.         public static DateTime UnixTimeStamp13ToUtcTime(this long unixTimeStamp)
  168.         {
  169.             return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(unixTimeStamp);
  170.         }
  171.         /// <summary>
  172.         /// 当前日期所在月份第一个指定星期几的日期
  173.         /// </summary>
  174.         /// <param name="date">给定日期</param>
  175.         /// <param name="dayOfWeek">星期几</param>
  176.         /// <returns>所对应的日期</returns>
  177.         public static DateTime GetFirstWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
  178.         {
  179.             var dt = date.GetMonthStart();
  180.             while (dt.DayOfWeek != dayOfWeek)
  181.                 dt = dt.AddDays(1);
  182.             return dt;
  183.         }
  184.         /// <summary>
  185.         /// 当前日期所在月份最后1个指定星期几的日期
  186.         /// </summary>
  187.         /// <param name="date">给定日期</param>
  188.         /// <param name="dayOfWeek">星期几</param>
  189.         /// <returns>所对应的日期</returns>
  190.         public static DateTime GetLastWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
  191.         {
  192.             var dt = date.GetMonthEnd();
  193.             while (dt.DayOfWeek != dayOfWeek)
  194.                 dt = dt.AddDays(-1);
  195.             return dt;
  196.         }
  197.         /// <summary>
  198.         /// 判断是否比指定之间早
  199.         /// </summary>
  200.         /// <param name="date"></param>
  201.         /// <param name="other"></param>
  202.         /// <returns></returns>
  203.         public static bool IsBefore(this DateTime date, DateTime other)
  204.         {
  205.             return date < other;
  206.         }
  207.         /// <summary>
  208.         /// 判断是否比指定时间晚
  209.         /// </summary>
  210.         /// <param name="date"></param>
  211.         /// <param name="other"></param>
  212.         /// <returns></returns>
  213.         public static bool IsAfter(this DateTime date, DateTime other)
  214.         {
  215.             return date > other;
  216.         }
  217.         /// <summary>
  218.         /// 给定日期所在月份共有多少天
  219.         /// </summary>
  220.         /// <param name="date"></param>
  221.         /// <returns></returns>
  222.         public static int GetCountDaysOfMonth(this DateTime date)
  223.         {
  224.             return date.GetMonthEnd().Day;
  225.         }
  226.         /// <summary>
  227.         /// 当前日期与给定日期是否是同一天
  228.         /// </summary>
  229.         /// <param name="date">当前日期</param>
  230.         /// <param name="dateToCompare">给定日期</param>
  231.         /// <returns></returns>
  232.         public static bool IsDateEqual(this DateTime date, DateTime dateToCompare)
  233.         {
  234.             return date.Date == dateToCompare.Date;
  235.         }
  236.         /// <summary>
  237.         /// 是否是周未
  238.         /// </summary>
  239.         /// <param name="date"></param>
  240.         /// <returns></returns>
  241.         public static bool IsWeekend(this DateTime date)
  242.         {
  243.             return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday;
  244.         }
  245.         /// <summary>
  246.         /// 是否是工作日
  247.         /// </summary>
  248.         /// <param name="date"></param>
  249.         /// <returns></returns>
  250.         public static bool IsWeekDay(this DateTime date)
  251.         {
  252.             return !date.IsWeekend();
  253.         }
  254.         /// <summary>
  255.         /// 判断是否为今天
  256.         /// </summary>
  257.         /// <param name="date"></param>
  258.         /// <returns></returns>
  259.         public static bool IsToday(this DateTime date)
  260.         {
  261.             return date.Date == DateTime.Now.Date;
  262.         }
  263.         /// <summary>
  264.         /// 判定公历闰年遵循的一般规律为:四年一闰,百年不闰,四百年再闰。
  265.         /// 公历闰年的精确计算方法:(按一回归年365天5小时48分45.5秒)
  266.         /// 普通年能被4整除而不能被100整除的为闰年。 (如2004年就是闰年,1900年不是闰年)
  267.         /// 世纪年能被400整除而不能被3200整除的为闰年。 (如2000年是闰年,3200年不是闰年)
  268.         /// 对于数值很大的年份能整除3200,但同时又能整除172800则又是闰年。(如172800年是闰年,86400年不是闰年)
  269.         /// 公元前闰年规则如下:
  270.         /// 非整百年:年数除4余数为1是闰年,即公元前1、5、9……年;
  271.         /// 整百年:年数除400余数为1是闰年,年数除3200余数为1,不是闰年,年数除172800余1又为闰年,即公元前401、801……年。
  272.         /// </summary>
  273.         /// <param name="dateTime"></param>
  274.         /// <returns></returns>
  275.         public static bool IsLeap(this DateTime dateTime)
  276.         {
  277.             var year = dateTime.Year;
  278.             if ((year % 400 == 0 && year % 3200 != 0)
  279.                || (year % 4 == 0 && year % 100 != 0)
  280.                || (year % 3200 == 0 && year % 172800 == 0))
  281.                 return true;
  282.             else
  283.                 return false;
  284.         }
  285.         /// <summary>
  286.         /// 获取当前年天数
  287.         /// </summary>
  288.         /// <param name="dateTime"></param>
  289.         /// <returns></returns>
  290.         public static int GetDaysByYear(this DateTime dateTime)
  291.         {
  292.             return (new DateTime(dateTime.Year + 1, 1, 1) - new DateTime(dateTime.Year, 1, 1)).Days;
  293.         }
  294.         /// <summary>
  295.         /// 获取当前年天数
  296.         /// </summary>
  297.         /// <param name="dateTime"></param>
  298.         /// <returns></returns>
  299.         public static int GetWeekCountByYear(this DateTime dateTime)
  300.         {
  301.             //找到今年的第一天是周几
  302.             int firstWeekend = Convert.ToInt32(DateTime.Parse(dateTime.Year + "-1-1").DayOfWeek);
  303.             //获取第一周的差额,如果是周日,则firstWeekend为0,第一周也就是从周天开始的。
  304.             int weekDay = firstWeekend == 0 ? 1 : (7 - firstWeekend + 1);
  305.             //获取今天是一年当中的第几天
  306.             int currentDay = dateTime.DayOfYear;
  307.             //(今天 减去 第一周周末)/7 等于 距第一周有多少周 再加上第一周的1 就是今天是今年的第几周了
  308.             //    刚好考虑了惟一的特殊情况就是,今天刚好在第一周内,那么距第一周就是0 再加上第一周的1 最后还是1
  309.             int current_week = Convert.ToInt32(Math.Ceiling((currentDay - weekDay) / 7.0)) + 1;
  310.             return current_week;
  311.         }
  312.     }
  313. }
复制代码
来源:https://www.cnblogs.com/ouyangkai/archive/2023/05/18/17412008.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具