首页 > 编程语言 >C#中的时间类

C#中的时间类

时间:2023-05-18 15:12:48浏览次数:31  
标签:return TimeSpan C# dateTime static 时间 DateTime public

DateTime类

DateTime类是C#中最常用的时间类之一,它表示一个日期和时间。可以使用DateTime.Now属性获取当前时间,也可以使用DateTime.Parse方法将字符串转换为DateTime对象。

// 获取当前时间
DateTime now = DateTime.Now;
// 将字符串转换为DateTime对象
DateTime dateTime = DateTime.Parse("2022-01-01 12:00:00");
// 获取当前时间的年份
int year = now.Year;
// 获取当前时间的月份
int month = now.Month;
// 获取当前时间的日期
int day = now.Day;
// 获取当前时间的小时数
int hour = now.Hour;
// 获取当前时间的分钟数
int minute = now.Minute;
// 获取当前时间的秒数
int second = now.Second;
// 获取当前时间的毫秒数
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天的TimeSpan对象
TimeSpan oneDay = TimeSpan.FromDays(1);

// 创建一个表示2小时的TimeSpan对象
TimeSpan twoHours = TimeSpan.FromHours(2);

// 创建一个表示30分钟的TimeSpan对象
TimeSpan thirtyMinutes = TimeSpan.FromMinutes(30);

// 创建一个表示10秒的TimeSpan对象
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对象。

// 获取当前时间
DateTimeOffset now = DateTimeOffset.Now

// 将字符串转换为DateTimeOffset对象
DateTimeOffset dateTimeOffset = DateTimeOffset.Parse("2022-01-01 12:00:00 +08:00");

DateTimeOffset类还提供了一些常用的方法和属性,例如:

  • DateTimeOffset.ToLocalTime():将当前DateTimeOffset对象转换为本地时间。
  • DateTimeOffset.ToUniversalTime():将当前DateTimeOffset对象转换为协调世界时(UTC)时间。

静态类的封装

using System;
namespace ToolBox.DateTimeTool
{
    public static class DateTimeExtend
    {
        /// <summary>
        /// 获取本日开始时间(0点0分0秒)
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime GetDayStart(this DateTime dateTime)
        {
            return dateTime.Date;
        }

        /// <summary>
        /// 获取本日结束时间(23点59分59秒)
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime GetDayEnd(this DateTime dateTime)
        {
            return dateTime.Date.AddDays(1).AddMilliseconds(-1);
        }

        /// <summary>
        /// 获取本周开始时间
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime GetWeekStart(this DateTime dateTime)
        {
            return dateTime.AddDays(-(int)dateTime.DayOfWeek + 1).GetDayStart();
        }

        /// <summary>
        /// 获取本周结束时间
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime GetWeekEnd(this DateTime dateTime)
        {
            return dateTime.AddDays(7 - (int)dateTime.DayOfWeek).GetDayEnd();
        }

        /// <summary>
        /// 获取本月开始时间
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime GetMonthStart(this DateTime dateTime)
        {
            return new DateTime(dateTime.Year, dateTime.Month, 1, 0, 0, 0, 0);
        }

        /// <summary>
        /// 获取本月结束时间
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime GetMonthEnd(this DateTime dateTime)
        {
            return GetMonthStart(dateTime).AddMonths(1).AddMilliseconds(-1);
        }

        /// <summary>
        /// 获取本季度开始时间
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime GetSeasonStart(this DateTime dateTime)
        {
            var time = dateTime.AddMonths(0 - ((dateTime.Month - 1) % 3));
            return DateTime.Parse(time.AddDays(-time.Day + 1).ToString("yyyy/MM/dd 00:00:00"));
        }

        /// <summary>
        /// 获取本季度结束时间
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime GetSeasonEnd(this DateTime dateTime)
        {
            var time = dateTime.AddMonths((3 - ((dateTime.Month - 1) % 3) - 1));
            return DateTime.Parse(time.AddMonths(1).AddDays(-time.AddMonths(1).Day + 1).AddDays(-1).ToString("yyyy/MM/dd 23:59:59"));
        }

        /// <summary>
        /// 获取本年开始时间
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime GetYearStart(this DateTime dateTime)
        {
            return DateTime.Parse(dateTime.AddDays(-dateTime.DayOfYear + 1).ToString("yyyy/MM/dd 00:00:00"));
        }

        /// <summary>
        /// 获取本年结束时间
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime GetYearEnd(this DateTime dateTime)
        {
            var time2 = dateTime.AddYears(1);
            return DateTime.Parse(time2.AddDays(-time2.DayOfYear).ToString("yyyy/MM/dd 23:59:59"));
        }

        /// <summary>
        /// 北京时间转换成unix时间戳(10位/秒)
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static long BeijingTimeToUnixTimeStamp10(this DateTime dateTime)
        {
            return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds;
        }

        /// <summary>
        /// 格林威治时间转换成unix时间戳(10位/秒)
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static long UtcTimeToUnixTimeStamp10(this DateTime dateTime)
        {
            return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
        }

        /// <summary>
        /// 北京时间转换成unix时间戳(13位/毫秒)
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static long BeijingTimeToUnixTimeStamp13(this DateTime dateTime)
        {
            return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalMilliseconds;
        }

        /// <summary>
        /// 格林威治时间转换成unix时间戳(13位/毫秒)
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static long UtcTimeToUnixTimeStamp13(this DateTime dateTime)
        {
            return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds;
        }

        /// <summary>
        /// 10位unix时间戳转换成北京时间
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime UnixTimeStamp10ToBeijingTime(this long unixTimeStamp)
        {
            return new DateTime(1970, 1, 1, 8, 0, 0).AddSeconds(unixTimeStamp);
        }

        /// <summary>
        /// 10位unix时间戳转换成格林威治
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime UnixTimeStamp10ToUtcTime(this long unixTimeStamp)
        {
            return new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(unixTimeStamp);
        }

        /// <summary>
        /// 13位unix时间戳转换成北京时间
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime UnixTimeStamp13ToBeijingTime(this long unixTimeStamp)
        {
            return new DateTime(1970, 1, 1, 8, 0, 0).AddMilliseconds(unixTimeStamp);
        }

        /// <summary>
        /// 13位unix时间戳转换成格林威治
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static DateTime UnixTimeStamp13ToUtcTime(this long unixTimeStamp)
        {
            return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(unixTimeStamp);
        }

        /// <summary>
        /// 当前日期所在月份第一个指定星期几的日期
        /// </summary>
        /// <param name="date">给定日期</param>
        /// <param name="dayOfWeek">星期几</param>
        /// <returns>所对应的日期</returns>
        public static DateTime GetFirstWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
        {
            var dt = date.GetMonthStart();
            while (dt.DayOfWeek != dayOfWeek)
                dt = dt.AddDays(1);

            return dt;
        }

        /// <summary>
        /// 当前日期所在月份最后1个指定星期几的日期
        /// </summary>
        /// <param name="date">给定日期</param>
        /// <param name="dayOfWeek">星期几</param>
        /// <returns>所对应的日期</returns>
        public static DateTime GetLastWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
        {
            var dt = date.GetMonthEnd();
            while (dt.DayOfWeek != dayOfWeek)
                dt = dt.AddDays(-1);

            return dt;
        }

        /// <summary>
        /// 判断是否比指定之间早
        /// </summary>
        /// <param name="date"></param>
        /// <param name="other"></param>
        /// <returns></returns>
        public static bool IsBefore(this DateTime date, DateTime other)
        {
            return date < other;
        }

        /// <summary>
        /// 判断是否比指定时间晚
        /// </summary>
        /// <param name="date"></param>
        /// <param name="other"></param>
        /// <returns></returns>
        public static bool IsAfter(this DateTime date, DateTime other)
        {
            return date > other;
        }

        /// <summary>
        /// 给定日期所在月份共有多少天
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static int GetCountDaysOfMonth(this DateTime date)
        {
            return date.GetMonthEnd().Day;
        }

        /// <summary>
        /// 当前日期与给定日期是否是同一天
        /// </summary>
        /// <param name="date">当前日期</param>
        /// <param name="dateToCompare">给定日期</param>
        /// <returns></returns>
        public static bool IsDateEqual(this DateTime date, DateTime dateToCompare)
        {
            return date.Date == dateToCompare.Date;
        }

        /// <summary>
        /// 是否是周未
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static bool IsWeekend(this DateTime date)
        {
            return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday;
        }

        /// <summary>
        /// 是否是工作日
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static bool IsWeekDay(this DateTime date)
        {
            return !date.IsWeekend();
        }

        /// <summary>
        /// 判断是否为今天
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static bool IsToday(this DateTime date)
        {
            return date.Date == DateTime.Now.Date;
        }

        /// <summary>
        /// 判定公历闰年遵循的一般规律为:四年一闰,百年不闰,四百年再闰。
        /// 公历闰年的精确计算方法:(按一回归年365天5小时48分45.5秒)
        /// 普通年能被4整除而不能被100整除的为闰年。 (如2004年就是闰年,1900年不是闰年)
        /// 世纪年能被400整除而不能被3200整除的为闰年。 (如2000年是闰年,3200年不是闰年)
        /// 对于数值很大的年份能整除3200,但同时又能整除172800则又是闰年。(如172800年是闰年,86400年不是闰年)
        /// 公元前闰年规则如下:
        /// 非整百年:年数除4余数为1是闰年,即公元前1、5、9……年;
        /// 整百年:年数除400余数为1是闰年,年数除3200余数为1,不是闰年,年数除172800余1又为闰年,即公元前401、801……年。
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static bool IsLeap(this DateTime dateTime)
        {
            var year = dateTime.Year;
            if ((year % 400 == 0 && year % 3200 != 0)
               || (year % 4 == 0 && year % 100 != 0)
               || (year % 3200 == 0 && year % 172800 == 0))
                return true;
            else
                return false;
        }

        /// <summary>
        /// 获取当前年天数
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static int GetDaysByYear(this DateTime dateTime)
        {
            return (new DateTime(dateTime.Year + 1, 1, 1) - new DateTime(dateTime.Year, 1, 1)).Days;
        }

        /// <summary>
        /// 获取当前年天数
        /// </summary>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static int GetWeekCountByYear(this DateTime dateTime)
        {
            //找到今年的第一天是周几
            int firstWeekend = Convert.ToInt32(DateTime.Parse(dateTime.Year + "-1-1").DayOfWeek);

            //获取第一周的差额,如果是周日,则firstWeekend为0,第一周也就是从周天开始的。
            int weekDay = firstWeekend == 0 ? 1 : (7 - firstWeekend + 1);

            //获取今天是一年当中的第几天
            int currentDay = dateTime.DayOfYear;

            //(今天 减去 第一周周末)/7 等于 距第一周有多少周 再加上第一周的1 就是今天是今年的第几周了
            //    刚好考虑了惟一的特殊情况就是,今天刚好在第一周内,那么距第一周就是0 再加上第一周的1 最后还是1
            int current_week = Convert.ToInt32(Math.Ceiling((currentDay - weekDay) / 7.0)) + 1;
            return current_week;
        }

    }
}

标签:return,TimeSpan,C#,dateTime,static,时间,DateTime,public
From: https://www.cnblogs.com/ouyangkai/p/17412008.html

相关文章

  • javascript创建数组
    javascript数组:vararray=[]等于创建一个数组array[0]代表给数组的第一个位置上赋值,值为32array[5]代表给数组的第六位置上赋值。值为3在位置0,1,2,5位置上都赋值,维度3,4位置上未赋值,但有一栏占位,所以会导致array.lenth获取数组的长度为6dor(vari=0;<array.lenth;i++){}代表的......
  • Echrtas 实时渲染
    1.实时曲线图业务场景:每个时间节点产生一个数据,且时间节点间隔不固定坐标轴配置:X轴类型设定为time,Y轴类型设定为value数据格式:每个节点的数据都是一个数组,第一个数组为时间,第二个元素为值//渲染参数varoption={ti......
  • 字典遍历 dict1.values,dict1.keys,dict1.items
    ''''''dict1={'K1':'Aa','K2':'Bb','K3':'Cc'}forkindict1.keys():print(k,end='\t')print()forvindict1.values():print(v,end=&#......
  • JS 时间格式化
    1、yyyyMMddHHmmss转yyyy-MM-ddHH:mm:ss格式//时间yyyyMMddHHmmss转yyyy-MM-ddHH:mm:ss格式//参数示例:'20230518000802'functiondateFormat(dateString){if(dateString!=''&&dateString!=null&&dateString!=undefined){......
  • MC我的世界模拟城市模拟大都市1.7.10-1.9模组下载
    title:模拟城市下载date:2019-12-2514:27:01permalink:/download/1sidebar:falsearticle:falseauthor:name:trhsylink:https://github.com/trhsy1.7.10下载免费链接自取1.7.10模拟城市整合包curseforge下载(打不开请用梯子):点这里下载不会的看这里视频教......
  • ChatGPT访问互联网,不神秘了
    我测试了一下,它其实调用了微软必应的api,搜索了关键词而已比如我问它:https://twitter.com/elonmusk马斯克最近在忙什么它的回答是:近期,马斯克在做的一些事情包括:在2023年的特斯拉年度股东大会上,他预告了两款新的电动车型,并表示特斯拉已经在制造其中的一款1。马斯克也在Twitte......
  • PB6接SCL,PB7接SDA,IIC通信访问 24C02, STM32F103的HAL版本
    在野火霸道板子上,已有at24c02,256个字节。/*测试代码*/staticuint8_tflag;uint8_tdata_w[]={1,2,3,4,5};uint8_tdata_r[5]={0};AT24CXX_Init();//初始化IIC接口flag=AT24CXX_Check();//检查器件if(flag==0){u16Writ......
  • .NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移
    前言接上期文章《.NET6项目连接数据库方式方法》,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类、数据库。把ORM框架和数据迁移都写进去。安装ORM框架,这里我们采用EFCore安装EFCore我的项目是在Linux上创建的,使用的是vscode开发工具远程开发。为了方便大家阅读和......
  • 编译chromium浏览器-win64版
    文档说明:只是记录关键点2023-05-18因为已经熟练实现linux版chromium,每月自动构建一版。在此基础上尝试构建win64版本快速构建的办法:购买抢占式云服务器,把配置(比如:32核CPU)买高一点,几个小时据构建完毕了,主要耗时地方是:下载资源准备工具#用于解压https://7-zip......
  • Mutex class和lock关键字之间的区别
    WhatisthedifferencebetweenusingMutexclassandusingthelockkeyword? HereisatablethatsummarizesthekeydifferencesbetweentheMutexclassandthelockkeyword:FeatureMutexclassLockkeywordWeightHeavyweightLightweightSpeedSlow......