zoukankan      html  css  js  c++  java
  • C# 日期帮助类

    using System;
    using System.Data;
    
    namespace Erp.Ship.Tool
    {
        [Serializable]
        public enum DateInterval
        {
            Second, Minute, Hour, Day, Week, Month, Quarter, Year
        }
        /// <summary>
        /// 日期处理工具类
        /// </summary>
        [Serializable]
        public class DateUtil
        {
            private DateUtil(){ }
            private static readonly string ISO8601Short = "yyyy-MM-dd";
            private static readonly string ISO8601Long = "yyyy-MM-dd HH:mm:ss";
            /// <summary>
            /// 从计划配置取得本周从星期几开始
            /// </summary>
            /// <returns></returns>
            public static DayOfWeek GetFirstDayOfWeek()
            {
                DayOfWeek firstDayOfWeek = DayOfWeek.Monday;
    
                DataRow[] drs = PlanUtil.SYS_DT.Select("attribute_name = 'Week_Start_Day'");
                if (drs != null && drs.Length > 0)
                {
                    string ATTRIBUTE_VALUE = drs[0]["ATTRIBUTE_VALUE"].ToString();
                    switch (ATTRIBUTE_VALUE)
                    {
                        case "0":
                            firstDayOfWeek = DayOfWeek.Sunday;
                            break;
                        case "1":
                            firstDayOfWeek = DayOfWeek.Monday;
                            break;
                        case "2":
                            firstDayOfWeek = DayOfWeek.Tuesday;
                            break;
                        case "3":
                            firstDayOfWeek = DayOfWeek.Wednesday;
                            break;
                        case "4":
                            firstDayOfWeek = DayOfWeek.Thursday;
                            break;
                        case "5":
                            firstDayOfWeek = DayOfWeek.Friday;
                            break;
                        case "6":
                            firstDayOfWeek = DayOfWeek.Saturday;
                            break;
                        default:
                            break;
                    }
                }
    
                return firstDayOfWeek;
            }
            /// <summary>
            /// 根据日期取得当前周次
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static int GetWeekOfYear(DateTime dt)
            {
                System.Globalization.GregorianCalendar gc = new System.Globalization.GregorianCalendar();
                DayOfWeek firstDayOfWeek = GetFirstDayOfWeek();
    
                int weekOfYear = gc.GetWeekOfYear(dt, System.Globalization.CalendarWeekRule.FirstDay, firstDayOfWeek);
    
                return weekOfYear;
            }
            /// <summary>
            /// 根据日期获取一个周期(7天)的开始日期
            /// </summary>
            /// <param name="cd"></param>
            /// <returns></returns>
            public static DateTime getStartDate(DateTime cd)
            {
    
                string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
                switch (Day[Convert.ToInt16(DateTime.Now.DayOfWeek)])
                {
                    case "星期日": return cd.AddDays(-9);
                    case "星期一": return cd.AddDays(-10);
                    case "星期二": return cd.AddDays(-11);
                    case "星期三": return cd.AddDays(-12);
                    case "星期四": return cd.AddDays(-13);
                    case "星期五": return cd.AddDays(-7);
                    case "星期六": return cd.AddDays(-8);
                }
                return cd;
            }
            /// <summary>
            /// 根据日期获取一个周期(7天)的结束日期
            /// </summary>
            /// <param name="cd"></param>
            /// <returns></returns>
            public static DateTime getEndDate(DateTime cd)
            {
                int t = Convert.ToInt16(cd.DayOfWeek);
                switch (t)
                {
                    case 0: return cd.AddDays(-3);
                    case 1: return cd.AddDays(-4);
                    case 2: return cd.AddDays(-5);
                    case 3: return cd.AddDays(-6);
                    case 4: return cd.AddDays(-7);
                    case 5: return cd.AddDays(-1);
                    case 6: return cd.AddDays(-2);
    
                }
                return cd;
            }
            /// <summary>
            /// 判断 字符对象 是否是日期字符
            /// </summary>
            /// <param name="obj">字符对象</param>
            /// <returns></returns>
            public static bool isDate(object  obj)
            {
                bool tag = false;
                try
                {
                    if (obj != null)
                    {
                        Convert.ToDateTime(obj.ToString());
                        tag = true;
                    } 
                }
                catch (Exception)
                {  
                }
                return tag;
            }
            public static string toStr(object obj)
            {
                try
                {
                    if (obj == null || obj == DBNull.Value)
                    {
                        return string.Empty;
                    }
                    else
                    {
                        return Convert.ToDateTime(obj.ToString()).ToString(DateUtil.ISO8601Short);
                    }
                }
                catch (Exception)
                {
                    return string.Empty;
                }
            }
            public static string toLongStr(object obj)
            {
                try
                {
                    if (obj == null || obj == DBNull.Value)
                    {
                        return string.Empty;
                    }
                    else
                    {
                        return Convert.ToDateTime(obj.ToString()).ToString(DateUtil.ISO8601Long);
                    }
                }
                catch (Exception)
                {
                    return string.Empty;
                }
            }
            /// <summary>
            /// 将日期对象转换成日期
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static DateTime toDate(object obj)
            {
                try
                {
                    if (obj != null)
                    {
                       return Convert.ToDateTime(obj.ToString().Trim());                    
                    }
                    else
                    {
                        return DateTime.MinValue;
                    }
                }
                catch (Exception)
                {
                    return DateTime.MinValue;
                }
               
            }
            /// <summary>
            /// 实现类似数据库 DateDiff 功能
            /// </summary>
            /// <param name="Interval">间隔类型</param>
            /// <param name="StartDate">开始日期</param>
            /// <param name="EndDate">结束日期</param>
            /// <returns></returns>
            public static long DateDiff(DateInterval Interval, System.DateTime StartDate, System.DateTime EndDate)
            {
                long lngDateDiffValue = 0;
                System.TimeSpan TS = new System.TimeSpan(EndDate.Ticks - StartDate.Ticks);
                switch (Interval)
                {
                    case DateInterval.Second:
                        lngDateDiffValue = (long)TS.TotalSeconds;
                        break;
                    case DateInterval.Minute:
                        lngDateDiffValue = (long)TS.TotalMinutes;
                        break;
                    case DateInterval.Hour:
                        lngDateDiffValue = (long)TS.TotalHours;
                        break;
                    case DateInterval.Day:
                        lngDateDiffValue = (long)TS.Days;
                        break;
                    case DateInterval.Week:
                        lngDateDiffValue = (long)(TS.Days / 7);
                        break;
                    case DateInterval.Month:
                        lngDateDiffValue = (long)(TS.Days / 30);
                        break;
                    case DateInterval.Quarter:
                        lngDateDiffValue = (long)((TS.Days / 30) / 3);
                        break;
                    case DateInterval.Year:
                        lngDateDiffValue = (long)(TS.Days / 365);
                        break;
                }
                return (lngDateDiffValue);
            }
            public static string toColorStr(object obj)
            {
                string temp = "";
                try
                {
                    if (obj != null)
                    {
                        DateTime dt = Convert.ToDateTime(obj.ToString());
                        if (dt.Year == 2011)
                        {
                            temp = "<span class='x-grid-back-red1'>" + dt.ToString(DateUtil.ISO8601Short) + "</span>";
                        }
                        if (dt.Year == 2012)
                        {
                            temp = "<span class='x-grid-back-red2'>" + dt.ToString(DateUtil.ISO8601Short) + "</span>";
                        }
                        if (dt.Year == 2013)
                        {
                            temp = "<span class='x-grid-back-red3'>" + dt.ToString(DateUtil.ISO8601Short) + "</span>";
                        }
                        if (dt.Year == 2014)
                        {
                            temp = "<span class='x-grid-back-red4'>" + dt.ToString(DateUtil.ISO8601Short) + "</span>";
                        }
    
                    }
                }
                catch (Exception)
                {
                }
                return temp;
            }
            /// <summary>
            /// 获取该年中是第几周
            /// </summary>
            /// <param name="day">日期</param>
            /// <returns></returns>
            public static int WeekOfYear(System.DateTime day)
            {
                int weeknum;
                System.DateTime fDt = DateTime.Parse(day.Year.ToString() + "-01-01");
                int k = Convert.ToInt32(fDt.DayOfWeek);//得到该年的第一天是周几 
                if (k == 0)
                {
                    k = 7;
                }
                int l = Convert.ToInt32(day.DayOfYear);//得到当天是该年的第几天 
                l = l - (7 - k + 1);
                if (l <= 0)
                {
                    weeknum = 1;
                }
                else
                {
                    if (l % 7 == 0)
                    {
                        weeknum = l / 7 + 1;
                    }
                    else
                    {
                        weeknum = l / 7 + 2;//不能整除的时候要加上前面的一周和后面的一周 
                    }
                }
                return weeknum;
            }
    
            public static string GetFirstDayOfWeekVal()
            {
                string ATTRIBUTE_VALUE = "1";
    
                DataRow[] drs = PlanUtil.SYS_DT.Select("attribute_name = 'Week_Start_Day'");
                if (drs != null && drs.Length > 0)
                {
                    ATTRIBUTE_VALUE = drs[0]["ATTRIBUTE_VALUE"].ToString();
                }
    
                return ATTRIBUTE_VALUE;
            }
    
            /// <summary>
            /// 获取该年中是第几季度
            /// </summary>
            /// <param name="day">日期</param>
            /// <returns></returns>
            public static int QuarterOfYear(System.DateTime day)
            {
                if (day.Month < 4)
                {
                    return 1;
                }
                else if (day.Month > 9)
                {
                    return 4;
                }
                else if (day.Month > 3 && day.Month < 7)
                {
                    return 2;
                }
                else
                {
                    return 3;
                }
            }
            /// <summary>
            /// 计算日期间隔
            /// </summary>
            /// <param name="d1">要参与计算的其中一个日期字符串</param>
            /// <param name="d2">要参与计算的另一个日期字符串</param>
            /// <returns>一个表示日期间隔的TimeSpan类型</returns>
            public static TimeSpan toResult(string d1, string d2)
            {
                try
                {
                    DateTime date1 = DateTime.Parse(d1);
                    DateTime date2 = DateTime.Parse(d2);
                    return toResult(date1, date2);
                }
                catch
                {
                    throw new Exception("字符串参数不正确!");
                }
            }
            /// <summary>
            /// 计算日期间隔
            /// </summary>
            /// <param name="d1">要参与计算的其中一个日期</param>
            /// <param name="d2">要参与计算的另一个日期</param>
            /// <returns>一个表示日期间隔的TimeSpan类型</returns>
            public static TimeSpan toResult(DateTime d1, DateTime d2)
            {
                TimeSpan ts;
                if (d1 > d2)
                {
                    ts = d1 - d2;
                }
                else
                {
                    ts = d2 - d1;
                }
                return ts;
            }
    
            /// <summary>
            /// 计算日期间隔
            /// </summary>
            /// <param name="d1">要参与计算的其中一个日期字符串</param>
            /// <param name="d2">要参与计算的另一个日期字符串</param>
            /// <param name="drf">决定返回值形式的枚举</param>
            /// <returns>一个代表年月日的int数组,具体数组长度与枚举参数drf有关</returns>
            public static int[] toResult(string d1, string d2, diffResultFormat drf)
            {
                try
                {
                    DateTime date1 = DateTime.Parse(d1);
                    DateTime date2 = DateTime.Parse(d2);
                    return toResult(date1, date2, drf);
                }
                catch
                {
                    throw new Exception("字符串参数不正确!");
                }
            }
            /// <summary>
            /// 计算日期间隔
            /// </summary>
            /// <param name="d1">要参与计算的其中一个日期</param>
            /// <param name="d2">要参与计算的另一个日期</param>
            /// <param name="drf">决定返回值形式的枚举</param>
            /// <returns>一个代表年月日的int数组,具体数组长度与枚举参数drf有关</returns>
            public static int[] toResult(DateTime d1, DateTime d2, diffResultFormat drf)
            {
                #region 数据初始化
                DateTime max;
                DateTime min;
                int year;
                int month;
                int tempYear, tempMonth;
                if (d1 > d2)
                {
                    max = d1;
                    min = d2;
                }
                else
                {
                    max = d2;
                    min = d1;
                }
                tempYear = max.Year;
                tempMonth = max.Month;
                if (max.Month < min.Month)
                {
                    tempYear--;
                    tempMonth = tempMonth + 12;
                }
                year = tempYear - min.Year;
                month = tempMonth - min.Month;
                #endregion
                #region 按条件计算
                if (drf == diffResultFormat.dd)
                {
                    TimeSpan ts = max - min;
                    return new int[] { ts.Days };
                }
                if (drf == diffResultFormat.mm)
                {
                    return new int[] { month + year * 12 };
                }
                if (drf == diffResultFormat.yy)
                {
                    return new int[] { year };
                }
                return new int[] { year, month };
                #endregion
            }
    
            /// <summary>
            /// 获取指定年月的最后一天
            /// </summary>
            /// <param name="year">年份</param>
            /// <param name="month">月份</param>
            /// <returns></returns>
            public static int GetLastDayofMonth(int year, int month)
            {
                int days = DateTime.DaysInMonth(year, month);
                DateTime datetime = new DateTime(year, month, 1);
                return datetime.AddDays(days - 1).Day;
            }
    
            /// <summary>  
            /// 获取指定日期所在周的第一天,星期天为第一天  
            /// </summary>  
            /// <param name="dateTime"></param>  
            /// <returns></returns>  
            public static DateTime GetDateTimeWeekFirstDaySun(DateTime dateTime)
            {
                DateTime firstWeekDay = DateTime.Now;
    
                try
                {
                    //得到是星期几,然后从当前日期减去相应天数   
                    int weeknow = Convert.ToInt32(dateTime.DayOfWeek);
    
                    int daydiff = (-1) * weeknow;
    
                    firstWeekDay = dateTime.AddDays(daydiff);
                }
                catch { }
    
                return firstWeekDay;
            }
    
            /// <summary>  
            /// 获取指定日期所在周的第一天,星期一为第一天  
            /// </summary>  
            /// <param name="dateTime"></param>  
            /// <returns></returns>  
            public static DateTime GetDateTimeWeekFirstDayMon(DateTime dateTime)
            {
                DateTime firstWeekDay = DateTime.Now;
    
                try
                {
                    int weeknow = Convert.ToInt32(dateTime.DayOfWeek);
    
                    //星期一为第一天,weeknow等于0时,要向前推6天。     
                    weeknow = (weeknow == 0 ? (7 - 1) : (weeknow - 1));
    
                    int daydiff = (-1) * weeknow;
    
                    firstWeekDay = dateTime.AddDays(daydiff);
                }
                catch { }
    
                return firstWeekDay;
            }
    
            /// <summary>  
            /// 获取指定日期所在周的最后一天,星期六为最后一天  
            /// </summary>  
            /// <param name="dateTime"></param>  
            /// <returns></returns>  
            public static DateTime GetDateTimeWeekLastDaySat(DateTime dateTime)
            {
                DateTime lastWeekDay = DateTime.Now;
    
                try
                {
                    int weeknow = Convert.ToInt32(dateTime.DayOfWeek);
    
                    int daydiff = (7 - weeknow) - 1;
    
                    lastWeekDay = dateTime.AddDays(daydiff);
    
                }
                catch { }
    
                return lastWeekDay;
            }
    
            /// <summary>  
            /// 获取指定日期所在周的最后一天,星期天为最后一天  
            /// </summary>  
            /// <param name="dateTime"></param>  
            /// <returns></returns>  
    
            public static DateTime GetDateTimeWeekLastDaySun(DateTime dateTime)
            {
                DateTime lastWeekDay = DateTime.Now;
    
                try
                {
                    int weeknow = Convert.ToInt32(dateTime.DayOfWeek);
    
                    weeknow = (weeknow == 0 ? 7 : weeknow);
    
                    int daydiff = (7 - weeknow);
    
                    lastWeekDay = dateTime.AddDays(daydiff);
                }
                catch { }
    
                return lastWeekDay;
            }
    
            /// <summary>  
            /// 获取指定日期的月份第一天  
            /// </summary>  
            /// <param name="dateTime"></param>  
            /// <returns></returns>  
            public static DateTime GetDateTimeMonthFirstDay(DateTime dateTime)
            {
                if (dateTime == null)
                {
                    dateTime = DateTime.Now;
                }
    
                return new DateTime(dateTime.Year, dateTime.Month, 1);
            }
    
            /// <summary>  
            /// 获取指定月份最后一天  
            /// </summary>  
            /// <param name="dateTime"></param>  
            /// <returns></returns>  
            public static DateTime GetDateTimeMonthLastDay(DateTime dateTime)
            {
                int day = DateTime.DaysInMonth(dateTime.Year, dateTime.Month);
    
                return new DateTime(dateTime.Year, dateTime.Month, day);
            }  
        }
    }
    
    /// <summary>
    /// 关于返回值形式的枚举
    /// </summary>
    public enum diffResultFormat
    {
        /// <summary>
        /// 年数和月数
        /// </summary>
        yymm,
        /// <summary>
        /// 年数
        /// </summary>
        yy,
        /// <summary>
        /// 月数
        /// </summary>
        mm,
        /// <summary>
        /// 天数
        /// </summary>
        dd,
    }
  • 相关阅读:
    【代码片段】HTML5嵌入媒体 (HTML5 Embedded Media)
    【代码片端】@Font-Face
    【代码片段】CSS3 渐变(CSS3 Gradients)
    【代码片段】CSS RESET,支持HTML5
    我的Cocos2d-x学习笔记(九)游戏帧循环(游戏主循环)
    我的Cocos2d-x学习笔记(八)利用CCSpriteBatchNode进行优化
    我的Cocos2d-x学习笔记(七)纹理缓存、帧缓存、精灵的创建、zOrder
    我的Cocos2d-x学习笔记(六)坐标体系与锚点
    我的Cocos2d-x学习笔记(五)CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex
    我的Cocos2d-x学习笔记(四)场景转换特效
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/12372004.html
Copyright © 2011-2022 走看看