DateHelper.cs 8.77 KB
using System;
using System.Collections.Generic;
using System.Text;

namespace Hh.Mes.Common.Date
{
   public class DateHelper
    {
        /// <summary>
        /// 取得某月的第一天
        /// </summary>
        /// <param name="datetime">要取得月份第一天的时间</param>
        /// <returns></returns>
        public static DateTime FirstDayOfMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day);
        }

        /// <summary>
        /// 取得某月的最后一天
        /// </summary>
        /// <param name="datetime"></param>
        /// <returns></returns>
        public static DateTime LastDayOfMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1);
        }

        /// <summary>
        /// 取得上个月第一天
        /// </summary>
        /// <param name="datetime">要取得上个月第一天的当前时间</param>
        /// <returns></returns>
        public static DateTime FirstDayOfPreviousMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day).AddMonths(-1);
        }

        /// <summary>
        /// 取得上个月的最后一天
        /// </summary>
        /// <param name="datetime">要取得上个月最后一天的当前时间</param>
        /// <returns></returns>
        public static DateTime LastDayOfPrdviousMonth(DateTime datetime)
        {
            return datetime.AddDays(1 - datetime.Day).AddDays(-1);
        }

        /// <summary>  
        /// 把秒转换成分钟  
        /// </summary>  
        /// <returns></returns>  
        public static int SecondToMinute(int Second)
        {
            decimal mm = (decimal)((decimal)Second / (decimal)60);
            return Convert.ToInt32(Math.Ceiling(mm));
        }

        #region 返回某年某月最后一天  
        /// <summary>  
        /// 返回某年某月最后一天  
        /// </summary>  
        /// <param name="year">年份</param>  
        /// <param name="month">月份</param>  
        /// <returns>日</returns>  
        public static int GetMonthLastDate(int year, int month)
        {
            DateTime lastDay = new DateTime(year, month, new System.Globalization.GregorianCalendar().GetDaysInMonth(year, month));
            int Day = lastDay.Day;
            return Day;
        }
        #endregion

        #region 返回时间差  
        public static string DateDiff(DateTime DateTime1, DateTime DateTime2)
        {
            string dateDiff = null;
            try
            {
                //TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);  
                //TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);  
                //TimeSpan ts = ts1.Subtract(ts2).Duration();  
                TimeSpan ts = DateTime2 - DateTime1;
                if (ts.Days >= 1)
                {
                    dateDiff = DateTime1.Month.ToString() + "月" + DateTime1.Day.ToString() + "日";
                }
                else
                {
                    if (ts.Hours > 1)
                    {
                        dateDiff = ts.Hours.ToString() + "小时前";
                    }
                    else
                    {
                        dateDiff = ts.Minutes.ToString() + "分钟前";
                    }
                }
            }
            catch
            { }
            return dateDiff;
        }
        #endregion

        #region 获得两个日期的间隔  
        /// <summary>  
        /// 获得两个日期的间隔绝对值
        /// </summary>  
        /// <param name="DateTime1">日期一。</param>  
        /// <param name="DateTime2">日期二。</param>  
        /// <returns>日期间隔TimeSpan。</returns>  
        public static int DateDiff2(DateTime DateTime1, DateTime DateTime2)
        {
            TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
            TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
            TimeSpan ts = ts1.Subtract(ts2).Duration();
            return (int)ts.TotalMinutes; 
        }

        /// <summary>  
        /// 获得两个日期的间隔绝对值
        /// </summary>  
        /// <param name="DateTime1">日期一。</param>  
        /// <param name="DateTime2">日期二。</param>  
        /// <returns>日期间隔TimeSpan。</returns>  
        public static int DateDiff3(TimeSpan DateTime1, TimeSpan DateTime2)
        {
            TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
            TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
            TimeSpan ts = ts1.Subtract(ts2).Duration();
            return (int)ts.TotalMinutes;
        }

        /// <summary>  
        /// 获得两个日期的间隔绝对值
        /// </summary>  
        /// <param name="DateTime1">日期一。</param>  
        /// <param name="DateTime2">日期二。</param>  
        /// <returns>日期间隔TimeSpan。</returns>  
        public static int DateMinuter(TimeSpan DateTime)
        {
            TimeSpan ts = new TimeSpan(DateTime.Ticks);
            var hours = ts.Hours * 60;
            var min = ts.Minutes;
            var sum = hours + min;
            return sum;
        }
        #endregion

        #region 格式化日期时间  
        /// <summary>  
        /// 格式化日期时间  
        /// </summary>  
        /// <param name="dateTime1">日期时间</param>  
        /// <param name="dateMode">显示模式</param>  
        /// <returns>0-9种模式的日期</returns>  
        public static string FormatDate(DateTime dateTime1, string dateMode)
        {
            switch (dateMode)
            {
                case "0":
                    return dateTime1.ToString("yyyy-MM-dd");
                case "1":
                    return dateTime1.ToString("yyyy-MM-dd HH:mm:ss");
                case "2":
                    return dateTime1.ToString("yyyy/MM/dd");
                case "3":
                    return dateTime1.ToString("yyyy年MM月dd日");
                case "4":
                    return dateTime1.ToString("MM-dd");
                case "5":
                    return dateTime1.ToString("MM/dd");
                case "6":
                    return dateTime1.ToString("MM月dd日");
                case "7":
                    return dateTime1.ToString("yyyy-MM");
                case "8":
                    return dateTime1.ToString("yyyy/MM");
                case "9":
                    return dateTime1.ToString("yyyy年MM月");
                default:
                    return dateTime1.ToString();
            }
        }
        #endregion

        #region 得到随机日期  
        /// <summary>  
        /// 得到随机日期  
        /// </summary>  
        /// <param name="time1">起始日期</param>  
        /// <param name="time2">结束日期</param>  
        /// <returns>间隔日期之间的 随机日期</returns>  
        public static DateTime GetRandomTime(DateTime time1, DateTime time2)
        {
            Random random = new Random();
            DateTime minTime = new DateTime();
            DateTime maxTime = new DateTime();

            System.TimeSpan ts = new System.TimeSpan(time1.Ticks - time2.Ticks);

            // 获取两个时间相隔的秒数  
            double dTotalSecontds = ts.TotalSeconds;
            int iTotalSecontds = 0;

            if (dTotalSecontds > System.Int32.MaxValue)
            {
                iTotalSecontds = System.Int32.MaxValue;
            }
            else if (dTotalSecontds < System.Int32.MinValue)
            {
                iTotalSecontds = System.Int32.MinValue;
            }
            else
            {
                iTotalSecontds = (int)dTotalSecontds;
            }


            if (iTotalSecontds > 0)
            {
                minTime = time2;
                maxTime = time1;
            }
            else if (iTotalSecontds < 0)
            {
                minTime = time1;
                maxTime = time2;
            }
            else
            {
                return time1;
            }

            int maxValue = iTotalSecontds;

            if (iTotalSecontds <= System.Int32.MinValue)
                maxValue = System.Int32.MinValue + 1;

            int i = random.Next(System.Math.Abs(maxValue));

            return minTime.AddSeconds(i);
        }

        public static decimal DateDiff(DateTime timeSpanStart, DateTime? timeSpanEnd)
        {
            throw new NotImplementedException();
        }
        #endregion


        public static int DateDiffDay(DateTime? dateStart, DateTime? dateEnd)
        {
            if (dateStart == null || dateEnd == null) return 0;
            var start = Convert.ToDateTime(dateStart.Value.ToShortDateString());
            var end = Convert.ToDateTime(dateEnd.Value.ToShortDateString());
            var sp = end.Subtract(start);
            return sp.Days;
        }
    }
}