asp.net(C#)实现功能强大的时间日期处理类完整实例

本文实例讲述了asp.net(C#)实现功能强大的时间日期处理类。分享给大家供大家参考,具体如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace MSCL
{
  /// <summary>
  /// 时间日期处理类
  /// </summary>
  public class DateTimeHelper
  {
    #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 string GetWeekNumberOfDay(DateTime idt)
    {
      string dt, week = "";
      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="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
    #region 获取两个日期之间的差值 可返回年 月 日 小时 分钟 秒
    /// <summary>
    /// 获取两个日期之间的差值
    /// </summary>
    /// <param name="howtocompare">比较的方式可为:year month day hour minute second</param>
    /// <param name="startDate">开始日期</param>
    /// <param name="endDate">结束日期</param>
    /// <returns>时间差</returns>
    public static double DateDiff(string howtocompare, DateTime startDate, DateTime endDate)
    {
      double diff = 0;
      try
      {
        TimeSpan TS = new TimeSpan(endDate.Ticks - startDate.Ticks);
        switch (howtocompare.ToLower())
        {
          case "year":
            diff = Convert.ToDouble(TS.TotalDays / 365);
            break;
          case "month":
            diff = Convert.ToDouble((TS.TotalDays / 365) * 12);
            break;
          case "day":
            diff = Convert.ToDouble(TS.TotalDays);
            break;
          case "hour":
            diff = Convert.ToDouble(TS.TotalHours);
            break;
          case "minute":
            diff = Convert.ToDouble(TS.TotalMinutes);
            break;
          case "second":
            diff = Convert.ToDouble(TS.TotalSeconds);
            break;
        }
      }
      catch (Exception)
      {
        diff = 0;
      }
      return diff;
    }
    #endregion
    #region 计算两个日期之间相差的工作日天数
    /// <summary>
    /// 计算两个日期之间相差的工作日天数
    /// </summary>
    /// <param name="dtStart">开始日期</param>
    /// <param name="dtEnd">结束日期</param>
    /// <param name="Flag">是否除去周六,周日</param>
    /// <returns>Int</returns>
    public static int CalculateWorkingDays(DateTime dtStart, DateTime dtEnd, bool Flag)
    {
      int count = 0;
      for (DateTime dtTemp = dtStart; dtTemp < dtEnd; dtTemp = dtTemp.AddDays(1))
      {
        if (Flag)
        {
          if (dtTemp.DayOfWeek != DayOfWeek.Saturday && dtTemp.DayOfWeek != DayOfWeek.Sunday)
          {
            count++;
          }
        }
        else
        {
          count++;
        }
      }
      return count;
    }
    #endregion
  }
}

更多关于asp.net相关内容感兴趣的读者可查看本站专题:《asp.net操作json技巧总结》、《asp.net字符串操作技巧汇总》、《asp.net操作XML技巧总结》、《asp.net文件操作技巧汇总》、《asp.net ajax技巧总结专题》及《asp.net缓存操作技巧总结》。

希望本文所述对大家asp.net程序设计有所帮助。

(0)

相关推荐

  • asp.net 时间类 一周的周一和周末的日期

    好多时候,数据库查询统计时需要使用本周统计 这里又不想把计算的任务交给数据去做 于是自己写个小函数,得到本周的周一和周末的时间,数据库比较的时候只需要 between ... and 就可以了 代码如下: #region 得到一周的周一和周日的日期 /// <summary> /// 计算本周的周一日期 /// </summary> /// <returns></returns> public static DateTime GetMondayDate()

  • ASP.NET中日历控件和JS版日历控件的使用方法(第5节)

    今天小编带大家以做任务的形式了解ASP.NET中日历控件的使用方法,主要任务内容: 1.添加一个日历,设置日期以蓝色的完整名称显示,周末以黄色背景红色文字显示,而当前日期使用绿色背景显示,用户可以选择一天.一周或整个月,被选的天/周/月使用灰色背景色来显示.当选中一个日期后,把时间显示在下面的一个文本框中,效果如图所示: 2.设计一个注册页面,使用js日历控件帮助用户输入出生日期.效果如图所示: 学习项目一  Calendar日历控件 1.在站点下创建一个Calendar页面,并在页面上拖放一个

  • asp.net基于Calendar实现blog日历功能示例

    本文实例讲述了asp.net基于Calendar实现blog日历功能.分享给大家供大家参考,具体如下: 怎样用.net的Calendar控件来实现blog中站点日历的效果呢,我们知道站点日历最重要的功能就是,显现在哪天blog主人写了日志,点击日期,你将进入所选日期的日志列表, 首先,我们知道.net中的服务器控件是会进行Postback的,Calendar控件中的第一天在点击时,就会进行一次postback我们要做的就是改变它默认的链接,使它不触发postback事件,其次,就是要知道哪一天有

  • ASP.NET中为TextBox中添加calendar.js示例代码

    1.在工程文件下面新建文件夹"js",然后向其中添加JavaScript.js新建项,重命名为calendar.js. 2.向calendar.js中写入代码, 复制代码 代码如下: var cal; var isFocus=false; //是否为焦点 //function SelectDate(obj,strFormat) //两个参数改为只传一个 function SelectDate(obj) { var date = new Date(); var by = date.get

  • asp.net中日历函数Calendar的使用方法

    今天介绍的是微软提供的ajax calendar控件.这个控件使用了ajax的效果,并通过前台js和style设置事件和效果.功能丰富.样式自有,实为网站设计.mis开发之必备控件. 按照惯例,现在该贴代码了: <asp教程:textbox runat="server" id="txtcalendar" width="150" /> <ajaxtoolkit:calendarextender runat="server

  • ASP.NET Calendar日历(日期)控件使用方法

    Calendar 控件显示一个日历,用户可通过该日历导航到任意一年的任意一天.当 ASP.NET 网页运行时,Calendar 控件以 HTML 表格的形式呈现.因此,该控件的许多属性与多种不同的表格格式相符.在这些属性中,有几个在一些低版本的浏览器中不能得到完全支持,因此在这些浏览器中并不能使用所有的格式功能. 使用 Calendar 控件在网页上显示日历的单个月.该控件使您可以选择日期并移到下个月或上个月.Calendar 控件支持 System.Globalization 命名空间中的所有

  • ASP.NET技巧:为Blog打造个性日历

    日历控件是.net自带的控件之一,功能强大,在很多项目开发中都有用到,对于blog系统来说更是必不可少.纵是好玉也仍需雕琢,为了使它更美观实用,我们还需要对它进行二次开发. 新建一个用户控件,把calender控件拉进来.第一步是外观设置,这个根据你的需要,只需对它的相关属性做一些调整即可.下图是我调整后的界面 属性设置如下: <asp:calendar id="Calendar1" CellPadding="2" Width="160px"

  • asp.net 日期函数 某月的第一天和最后一天的日期

    #region 得到一个月的第一天和最后一天的日期 /// <summary> /// 得到本月的第一天日期 /// </summary> /// <returns>DateTime</returns> public static DateTime GetFirstDayOfMonth() { return GetFirstDayOfMonth(DateTime.Now); } /// <summary> /// 得到本月的最有一天的日期 ///

  • ASP.NET如何获取两个日期之间的天数

    复制代码 代码如下: DateTime startdate=DateTime.Parse("2013-11-01"); DateTime enddate = DateTime.Parse("2013-11-11"); int d = enddate.Subtract(startdate).Days; 定义开始时间startdate 结束时间enddate 使用方法Subtract得到两个时间差

  • 在ASP.NET中实现弹出日历的具体方法

    ctlCalendar.ascx的源代码: 复制代码 代码如下: <%@ Control Language="c#" AutoEventWireup="false" Codebehind="ctlCalendar.ascx.cs" Inherits="calendar.ctlCalendar" TargetSchema="http://schemas.microsoft.com/intellisense/ie5

  • Asp.net 时间操作基类(支持短日期,长日期,时间差)

    复制代码 代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; nam

  • ASP.NET中实现弹出日历示例

    在.net中弹出日历的方法有很多种,这里介绍直接使用.net来实例,我们当然还可以使用js日历来实例哦,下面我分别简单举两个实例吧.有需要的朋友可以了解一下. 代码如下: <%@ Control Language="c#" AutoEventWireup="false" Codebehind="ctlCalendar.ascx.cs" Inherits="calendar.ctlCalendar" TargetSchem

随机推荐