C#编程学习42:时间处理函数最全解析

目录

1 月份和周的中英文全称及缩写

1.1 获取当前月信息--中文/英文

1.2 获取当前周信息--中文/英文

2UNIX时间戳(10位/13位)获取与逆转换

2.1 日期转UNIX时间戳

2.2.1 函数版

2.1.2 捕获异常版本

2.2 UNIX时间戳转日期

2.2.1 10位转日期

2.2.2 10位与13位合并版本

3 获取特性信息

3.1 明细信息(某月天数、某日在当年的天数、Windows文件时间、时间周期数、是否为闰年、UTC时、计时周期数)

3.2 长格式与短格式[年月、月日、年月日时分、时分]

3.3 两个时间比较DateTime.Compare

3.4 两个时间的时间差[年数、月数、日数、小时数、分钟数、秒数、毫秒数]

3.5 自定义的时间格式[y/M/d/h/m/s]


完整版代码请参见[运筹优化与图像处理算法编程]公众号,回复“C#日期处理”,文末有二维码

1 月份和周的中英文全称及缩写

1.1 获取当前月信息--中文/英文

           //1 英文的星期信息
           Console.WriteLine("Today is " + DateTime.Now.DayOfWeek);
           //月份全称形式--使用dddd
           Console.WriteLine("The month is " + DateTime.Now.ToString("DDDD", CultureInfo.CreateSpecificCulture("en-GB")));
           //月份简写形式--使用标识ddd
           Console.WriteLine("The month is " + DateTime.Now.ToString("ddd", CultureInfo.CreateSpecificCulture("en-GB")));
           //月份简写形式--获取子串法
           Console.WriteLine("Today is " + DateTime.Now.DayOfWeek.ToString().Substring(0,3));
         
           //2 获取中文的星期信息
           string[] WeekChn = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
           Console.WriteLine("今天是" + WeekChn[Convert.ToInt32(DateTime.Now.DayOfWeek)]);

1.2 获取当前周信息--中文/英文

 
            //获取当前的月信息
           //方法一:使用zh-CN
           Console.WriteLine("本月是" + DateTime.Now.ToString("MMM", CultureInfo.CreateSpecificCulture("zh-CN")));
           //方法二:定义月份数组
            string[] MonthChn = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" };
           Console.WriteLine("本月是" + MonthChn[DateTime.Now.Month-1]);
            //方法三:使用en-GB,英文简写
           Console.WriteLine("The month is " + DateTime.Now.ToString("MMM", CultureInfo.CreateSpecificCulture("en-GB")));
            //方法四:使用MMMM得到英文全称
           Console.WriteLine("The month is " + DateTime.Now.ToString("MMMM", CultureInfo.CreateSpecificCulture("en-GB")));

2UNIX时间戳(10位/13位)获取与逆转换

2.1 日期转UNIX时间戳

             //获取Unix时间戳
            TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
           Console.WriteLine("10位秒版本的时间戳:"+ts.TotalSeconds);
           Console.WriteLine("10位[整数]秒版本的时间戳:" + Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds));//四舍五入
           Console.WriteLine("13位毫秒版本的时间戳:" + (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds);
            //三种取整方式:四舍五入、向下取整、向上取整
           Console.WriteLine("10位[整数]秒版本的时间戳:" + Math.Round((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds));//四舍五入
           Console.WriteLine("10位[整数]秒版本的时间戳:" + Math.Floor((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds));//四舍五入
           Console.WriteLine("10位[整数]秒版本的时间戳:" + Math.Ceiling((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds));//四舍五入

2.2.1 函数版


/// <summary>  
        /// 获取当前时间戳  
        /// </summary>  
        /// <param name="bflag">为真时获取10位时间戳,为假时获取13位时间戳.bool bflag = true</param>  
        /// <returns></returns>  
        public static string GetTimeStamp(bool bflag)
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            string ret = string.Empty;
            if (bflag)
                ret = Convert.ToInt64(ts.TotalSeconds).ToString();
            else
                ret = Convert.ToInt64(ts.TotalMilliseconds).ToString();

            return ret;
        }

2.1.2 捕获异常版本

//生成unix格式时间
        public static long getUnix()
        {
            try
            {
                TimeSpan timespan = DateTime.UtcNow - new DateTime(1970, 1, 1);
                //return (long)timespan.TotalSeconds;//获取10位
                return (long)timespan.TotalMilliseconds;
            }
            catch (Exception)
            {
                return -1;
            }
        }

2.2 UNIX时间戳转日期

2.2.1 10位转日期

        private static DateTime GetTime(string timeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(timeStamp + "0000000");
            TimeSpan toNow = new TimeSpan(lTime);
            return dtStart.Add(toNow);
        }

2.2.2 10位与13位合并版本

        private static string unixTimeToTime(string timeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime;
            if (timeStamp.Length.Equals(10))//判断是10位
            {
                lTime = long.Parse(timeStamp + "0000000");
            }
            else
            {
                lTime = long.Parse(timeStamp + "0000");//13位
            }
            TimeSpan toNow = new TimeSpan(lTime);
            DateTime daTime = dtStart.Add(toNow);
            string time = daTime.ToString("yyyy-MM-dd HH:mm:ss");//转为了string格式
            return time;
        }

3 获取特性信息

3.1 明细信息(某月天数、某日在当年的天数、Windows文件时间、时间周期数、是否为闰年、UTC时、计时周期数)

 //--------------获取特定信息----------------------------
           //得到某月的天数
           Console.WriteLine("本月天数为:" + DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));
            //今天是一年的第多少天
           Console.WriteLine("今天是本年度的第" + DateTime.Now.DayOfYear + "天");
           Console.WriteLine("现在是" + DateTime.Now.Hour + "点");
           //得到当前时间的 Windows 文件时间:自公元1601年 1月 1日午夜12:00 之后经过的100纳秒间隔数, 公元协调世界时(UTC)
           Console.WriteLine("此刻的 Windows 文件时间为" + DateTime.Now.ToFileTimeUtc().ToString());
           Console.WriteLine("此刻的 Windows 文件时间为" + DateTime.Now.ToFileTime().ToString());
           //时间周期数:一个计时周期表示一百纳秒,即一千万分之一秒
           Console.WriteLine("此刻的 计时周期数为" + DateTime.Now.Ticks);
           //协调世界时(UTC)等于本地时间减去 UTC 偏移量
           Console.WriteLine("此刻的UTC时为:" + DateTime.Now.ToUniversalTime());
           //是不是闰年
           Console.WriteLine("今年是不是闰年:" + DateTime.IsLeapYear(DateTime.Now.Year));

3.2 长格式与短格式[年月、月日、年月日时分、时分]

            //--------------短时间和长时间格式-----------------------
            //年月日时分:g不带秒/G带秒
           Console.WriteLine("短时间格式[yyyy/MM/dd hh:mm]:{0:g}", DateTime.Now);
           Console.WriteLine("长时间格式[yyyy/MM/dd hh:mm:ss]:{0:G}", DateTime.Now);
           //年月日时分:f不带秒/F带秒
           Console.WriteLine("短时间格式[yyyy年MM月dd hh:mm]:{0:f}", DateTime.Now);
           Console.WriteLine("长时间格式[yyyy年MM月dd hh:mm:ss]:{0:F}", DateTime.Now);

            //年月日:D/d
           Console.WriteLine("短时间格式[年/月/日]:" + DateTime.Now.ToShortDateString());
           Console.WriteLine("长时间格式[*年*月*日]:" + DateTime.Now.ToLongDateString());
           Console.WriteLine("短时间格式[年/月/日]:{0:d}", DateTime.Now);
           Console.WriteLine("长时间格式[*年*月*日]:{0:D}", DateTime.Now);
            //月日格式
           Console.WriteLine(String.Format("短时间格式[月/日]:{0:M}",DateTime.Now));
           Console.WriteLine(String.Format("长时间格式[月/日]:{0:m}",DateTime.Now));
            //时分:t不带秒/T带秒
           Console.WriteLine(String.Format("短时间格式[时:分]: {0:t}", DateTime.Now));
           Console.WriteLine(String.Format("长时间格式[时:分]: {0:T}", DateTime.Now));
           Console.WriteLine("长时间格式[时:分]: " + DateTime.Now.ToLongTimeString());
           Console.WriteLine("短时间格式[时:分]: " + DateTime.Now.ToShortTimeString());
            //年月格式
           Console.WriteLine(String.Format("短时间格式[年月]: {0:y}", DateTime.Now));
           Console.WriteLine(String.Format("长时间格式[年月]: {0:Y}", DateTime.Now));

结果

3.3 两个时间比较DateTime.Compare

//两个时间比较:第一个时间早于(-1)等于(0)晚于(1)第二个时间
            Console.WriteLine(DateTime.Compare(new DateTime(2020,2,14,0,0,0), DateTime.Now));
            Console.WriteLine(DateTime.Compare(DateTime.Now, DateTime.Now));
            Console.WriteLine(DateTime.Compare(new DateTime(2019, 2, 14, 0, 0, 0), DateTime.Now));

3.4 两个时间的时间差[年数、月数、日数、小时数、分钟数、秒数、毫秒数]

            //------------两个时间的时间差
           TimeSpan DateDif = new DateTime(2020,2,14,0,0,0) - DateTime.Now;
           Console.WriteLine("今天到2020年2月14日的间隔为" + DateDif.ToString());
           Console.WriteLine("今天到2020年2月14日的间隔的秒数" + DateDif.TotalSeconds);
           Console.WriteLine("今天到2020年2月14日的间隔的毫秒数" + DateDif.TotalMilliseconds);
           Console.WriteLine("今天到2020年2月14日的间隔的分钟数" + DateDif.TotalMinutes);
           Console.WriteLine("今天到2020年2月14日的间隔的小时数" + DateDif.TotalHours);
           Console.WriteLine("今天到2020年2月14日的间隔的天数" + DateDif.TotalDays);
           DateTime dt = new DateTime(2010,1,1,0,0,0);        
            //相隔的年数
           int YearDif = DateTime.Now.Year - dt.Year;
           Console.WriteLine("今天到2010年2月14日到今天已经过去了" + YearDif + "年");
           //相隔的月数
           int MonthDif = (DateTime.Now.Year - dt.Year) * 12 + (DateTime.Now.Month - dt.Month);
           Console.WriteLine("今天到2010年2月14日到今天已经过去了" + MonthDif + "个月");

3.5 自定义的时间格式[y/M/d/h/m/s]

注意:HH代表的是24小时制,dd表示12小时之

           Console.WriteLine("今天是" + DateTime.Now.ToString());
           Console.WriteLine("现在是" + DateTime.Now.Hour + "点");
           Console.WriteLine(DateTime.Now.ToLocalTime());//获取本地时间
            
            //------------自己控制需要的时间格式
           Console.WriteLine("今年是" + DateTime.Now.ToString("yyyy年MM"));
           Console.WriteLine("本月是" + DateTime.Now.ToString("yyyy年MM月"));
           Console.WriteLine("今天是" + DateTime.Now.ToString("yyyy年MM月dd日"));
           Console.WriteLine("现在是[12小时制]" + DateTime.Now.ToString("yyyy年MM月dd日hh点"));
           Console.WriteLine("现在是[24小时制]" + DateTime.Now.ToString("yyyy年MM月dd日HH点"));
           Console.WriteLine("现在是" + DateTime.Now.ToString("yyyy年MM月dd日hh点mm分"));
           Console.WriteLine("现在是" + DateTime.Now.ToString("yyyy年MM月dd日hh点mm分ss秒"));


如果喜欢我的分享,可关注以下两个公众帐号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小薛引路

喜欢的读者,可以打赏鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值