DateUtil共通使用

本文介绍了一个实用的日期操作工具类,包含获取指定年份的天数、月份天数、当前日期的星期信息等功能,并提供了判断闰年的方法。适用于.NET应用程序中的日期计算需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Text;
namespace Common
{
   public class DateUtil
   {
      #region 构造函数
      //构造函数
      public DateUtil()
      {
      }
      #endregion 
      #region  返回本年有多少天
      /// <summary>返回本年有多少天</summary>
      /// <param name="iYear">年份</param>
      /// <returns>本年的天数</returns>
      public static int GetDaysOfYear(int iYear)
      {
         int cnt = 0;
         if (IsRuYear(iYear))
         {
            //闰年多 1 天 即:2 月为 29 天
            cnt = 366;
         }
         else
         {
            //--非闰年少1天 即:2 月为 28 天
            cnt = 365;
         }
         return cnt;
      }
      #endregion
      
      #region 本年有多少天
      /// <summary>本年有多少天</summary>
      /// <param name="dt">日期</param>
      /// <returns>本天在当年的天数</returns>
      public static int GetDaysOfYear(DateTime idt)
      {
         int n;
         //取得传入参数的年份部分,用来判断是否是闰年
         n = idt.Year;
         if (IsRuYear(n))
         {
            //闰年多 1 天 即:2 月为 29 天
            return 366;
         }
         else
         {
            //--非闰年少1天 即:2 月为 28 天
            return 365;
         }
      }
      #endregion
      #region 本月有多少天
      /// <summary>本月有多少天</summary>
      /// <param name="iYear">年</param>
      /// <param name="Month">月</param>
      /// <returns>天数</returns>
      public static int GetDaysOfMonth(int iYear, int Month)
      {
         int days = 0;
         switch (Month)
         {
            case 1:
               days = 31;
               break;
            case 2:
               if (IsRuYear(iYear))
               {
                  //闰年多 1 天 即:2 月为 29 天
                  days = 29;
               }
               else
               {
                  //--非闰年少1天 即:2 月为 28 天
                  days = 28;
               }
               break;
            case 3:
               days = 31;
               break;
            case 4:
               days = 30;
               break;
            case 5:
               days = 31;
               break;
            case 6:
               days = 30;
               break;
            case 7:
               days = 31;
               break;
            case 8:
               days = 31;
               break;
            case 9:
               days = 30;
               break;
            case 10:
               days = 31;
               break;
            case 11:
               days = 30;
               break;
            case 12:
               days = 31;
               break;
         }
         return days;

      }
      #endregion
      
      #region 本月有多少天
      /// <summary>本月有多少天</summary>
      /// <param name="dt">日期</param>
      /// <returns>天数</returns>
      public static int GetDaysOfMonth(DateTime dt)
      {
         //--------------------------------//
         //--从dt中取得当前的年,月信息  --//
         //--------------------------------//
         int year, month, days = 0;
         year = dt.Year;
         month = dt.Month;
         //--利用年月信息,得到当前月的天数信息。
         switch (month)
         {
            case 1:
               days = 31;
               break;
            case 2:
               if (IsRuYear(year))
               {
                  //闰年多 1 天 即:2 月为 29 天
                  days = 29;
               }
               else
               {
                  //--非闰年少1天 即:2 月为 28 天
                  days = 28;
               }
               break;
            case 3:
               days = 31;
               break;
            case 4:
               days = 30;
               break;
            case 5:
               days = 31;
               break;
            case 6:
               days = 30;
               break;
            case 7:
               days = 31;
               break;
            case 8:
               days = 31;
               break;
            case 9:
               days = 30;
               break;
            case 10:
               days = 31;
               break;
            case 11:
               days = 30;
               break;
            case 12:
               days = 31;
               break;
         }
         return days;
      }
      #endregion
      #region 返回当前日期的星期名称
      /// <summary>返回当前日期的星期名称</summary>
      /// <param name="dt">日期</param>
      /// <returns>星期名称</returns>
      public static string GetWeekNameOfDay(DateTime idt)
      {
         string dt, week = "";
         dt = idt.DayOfWeek.ToString();
         switch (dt)
         {
            case "Mondy":
               week = "星期一";
               break;
            case "Tuesday":
               week = "星期二";
               break;
            case "Wednesday":
               week = "星期三";
               break;
            case "Thursday":
               week = "星期四";
               break;
            case "Friday":
               week = "星期五";
               break;
            case "Saturday":
               week = "星期六";
               break;
            case "Sunday":
               week = "星期日";
               break;
         }
         return week;
      }
      #endregion
      #region 返回当前日期的星期编号
      /// <summary>返回当前日期的星期编号</summary>
      /// <param name="dt">日期</param>
      /// <returns>星期数字编号</returns>
      public static int GetWeekNumberOfDay(DateTime idt)
      {
         string dt;
         int week = 1;
         dt = idt.DayOfWeek.ToString();
         switch (dt)
         {
            case "Mondy":
               week = 1;
               break;
            case "Tuesday":
               week = 2;
               break;
            case "Wednesday":
               week = 3;
               break;
            case "Thursday":
               week = 4;
               break;
            case "Friday":
               week = 5;
               break;
            case "Saturday":
               week = 6;
               break;
            case "Sunday":
               week = 7;
               break;
         }
         return week;
      }
      #endregion
      #region 返回当前时间的一周前时间
      /// <summary>
      /// 返回当前时间的一周前时间
      /// </summary>
      /// <param name="idt"></param>
      /// <returns></returns>
      public static DateTime GetStartTime(DateTime idt)
      {
         string dt;
         dt = idt.DayOfWeek.ToString();
         switch (dt)
         {
            case "Mondy":
               return idt.AddDays(-7);
            case "Tuesday":
               return idt.AddDays(-8);
            case "Wednesday":
               return idt.AddDays(-9);
            case "Thursday":
               return idt.AddDays(-10);
            case "Friday":
               return idt.AddDays(-11);
            case "Saturday":
               return idt.AddDays(-12);
            case "Sunday":
               return idt.AddDays(-13);
            default:
               return idt.AddDays(-7);
         }
      }
      #endregion
      #region 返回当前时间的一周后时间
      public static DateTime GetEndTime(DateTime idt)
      {
         string dt;
         dt = idt.DayOfWeek.ToString();
         switch (dt)
         {
            case "Mondy":
               return idt.AddDays(-1);
            case "Tuesday":
               return idt.AddDays(-2);
            case "Wednesday":
               return idt.AddDays(-3);
            case "Thursday":
               return idt.AddDays(-4);
            case "Friday":
               return idt.AddDays(-5);
            case "Saturday":
               return idt.AddDays(-6);
            case "Sunday":
               return idt.AddDays(-7);
            default:
               return idt.AddDays(-1);
         }
      }
      #endregion
      
      #region 返回二日期差的天数和小时数
      /// <summary>
      /// 返回二日期差的天数和小时数
      /// </summary>
      /// <param name="startDate"></param>
      /// <param name="endDate"></param>
      /// <returns></returns>
      public static string DateDiff(System.DateTime startDate, System.DateTime endDate)
      {
         System.TimeSpan TS = new System.TimeSpan(endDate.Ticks - startDate.Ticks);
         return (Convert.ToInt32(TS.TotalHours / 24).ToString() + " 天 " + Convert.ToInt32(TS.TotalHours % 24).ToString() + " 小时");
      }
      #endregion
      #region 返回两个日期之间相差的天数
      /// <summary>返回两个日期之间相差的天数</summary>
      /// <param name="dt">两个日期参数</param>
      /// <returns>天数</returns>
      public static int DiffDays(DateTime dtfrm, DateTime dtto)
      {
         int diffcnt = 0;
         //diffcnt = dtto- dtfrm ;
         return diffcnt;
      }
      #endregion
      #region 判断当前日期所属的年份是否是闰年,私有函数
      /// <summary>判断当前日期所属的年份是否是闰年,私有函数</summary>
      /// <param name="dt">日期</param>
      /// <returns>是闰年:True ,不是闰年:False</returns>
      private static bool IsRuYear(DateTime idt)
      {
         //形式参数为日期类型 
         //例如:2003-12-12
         int n;
         n = idt.Year;
         if ((n % 400 == 0) || (n % 4 == 0 && n % 100 != 0))
         {
            return true;
         }
         else
         {
            return false;
         }
      }
      #endregion
      
      #region 判断当前年份是否是闰年,私有函数
      /// <summary>判断当前年份是否是闰年,私有函数</summary>
      /// <param name="dt">年份</param>
      /// <returns>是闰年:True ,不是闰年:False</returns>
      private static bool IsRuYear(int iYear)
      {
         //形式参数为年份
         //例如:2003
         int n;
         n = iYear;
         if ((n % 400 == 0) || (n % 4 == 0 && n % 100 != 0))
         {
            return true;
         }
         else
         {
            return false;
         }
      }
      #endregion
      #region 将输入的字符串转化为日期。如果字符串的格式非法,则返回当前日期
      /// <summary>
      /// 将输入的字符串转化为日期。如果字符串的格式非法,则返回当前日期。
      /// </summary>
      /// <param name="strInput">输入字符串</param>
      /// <returns>日期对象</returns>
      public static DateTime ConvertStringToDate(string strInput)
      {
         DateTime oDateTime;
         try
         {
            oDateTime = DateTime.Parse(strInput);
         }
         catch (Exception)
         {
            oDateTime = DateTime.Today;
         }
         return oDateTime;
      }
      #endregion
      #region 将日期对象转化为格式字符串
      /// <summary>
      /// 将日期对象转化为格式字符串
      /// </summary>
      /// <param name="oDateTime">日期对象</param>
      /// <param name="strFormat">
      /// 格式:
      ///		"SHORTDATE"===短日期
      ///		"LONGDATE"==长日期
      ///		其它====自定义格式
      /// </param>
      /// <returns>日期字符串</returns>
      public static string ConvertDateToString(DateTime oDateTime, string strFormat)
      {
         string strDate = "";
         try
         {
            switch (strFormat.ToUpper())
            {
               case "SHORTDATE":
                  strDate = oDateTime.ToShortDateString();
                  break;
               case "LONGDATE":
                  strDate = oDateTime.ToLongDateString();
                  break;
               default:
                  strDate = oDateTime.ToString(strFormat);
                  break;
            }
         }
         catch (Exception)
         {
            strDate = oDateTime.ToShortDateString();
         }
         return strDate;
      }
      #endregion
      #region 判断是否为合法日期,必须大于1800年1月1日
      /// <summary>
      /// 判断是否为合法日期,必须大于1800年1月1日
      /// </summary>
      /// <param name="strDate">输入日期字符串</param>
      /// <returns>True/False</returns>
      public static bool IsDateTime(string strDate)
      {
         try
         {
            DateTime oDate = DateTime.Parse(strDate);
            if (oDate.CompareTo(DateTime.Parse("1800-1-1")) > 0)
               return true;
            else
               return false;
         }
         catch (Exception)
         {
            return false;
         }
      }
      #endregion
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值