DateTimeHelper扩展类

using System;
using System.Globalization;
using System.Threading;
 
namespace TestBjDs
{
    public static class DateTimeHelper
    {
        public static string DefaultFormat;
 
        static DateTimeHelper()
        {
            DefaultFormat = "yyyy-MM-dd";
        }
 
        public static DateTime AddBusinessDays(this DateTime current, int days)
        {
            int num = Math.Sign(days);
            int num1 = Math.Abs(days);
            for (int i = 0; i < num1; i++)
            {
                do
                {
                    current = current.AddDays(num);
                } while (current.DayOfWeek == DayOfWeek.Saturday || current.DayOfWeek == DayOfWeek.Sunday);
            }
            return current;
        }
 
        public static DateTime At(this DateTime current, int hour, int minute)
        {
            return current.SetTime(hour, minute);
        }
 
        public static DateTime At(this DateTime current, int hour, int minute, int second)
        {
            return current.SetTime(hour, minute, second);
        }
 
        public static DateTime At(this DateTime current, int hour, int minute, int second, int milliseconds)
        {
            return current.SetTime(hour, minute, second, milliseconds);
        }
 
        public static DateTime BeginningOfDay(this DateTime date)
        {
            return new DateTime(date.Year, date.Month, date.Day, 0, 0, 0, 0, date.Kind);
        }
 
        public static DateTime BeginningOfDay(this DateTime date, int timezoneOffset)
        {
            DateTime dateTime = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0, 0, date.Kind);
            return dateTime.AddHours(timezoneOffset);
        }
 
        public static DateTime DecreaseTime(this DateTime startDate, TimeSpan toSubtract)
        {
            return startDate - toSubtract;
        }
 
        public static DateTime EndOfDay(this DateTime date)
        {
            return new DateTime(date.Year, date.Month, date.Day, 23, 59, 59, 999, date.Kind);
        }
 
        public static DateTime EndOfDay(this DateTime date, int timeZoneOffset)
        {
            DateTime dateTime = new DateTime(date.Year, date.Month, date.Day, 23, 59, 59, 999, date.Kind);
            return dateTime.AddHours(timeZoneOffset);
        }
 
        public static DateTime FirstDayOfMonth(this DateTime current)
        {
            return current.SetDay(1);
        }
 
        public static DateTime FirstDayOfQuarter(this DateTime current)
        {
            int month = (current.Month - 1) / 3 + 1;
            DateTime dateTime = new DateTime(current.Year, 3 * month - 2, 1);
            return current.SetDate(dateTime.Year, dateTime.Month, dateTime.Day);
        }
 
        public static DateTime FirstDayOfWeek(this DateTime dateTime)
        {
            DayOfWeek firstDayOfWeek = Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
            int dayOfWeek = (int) dateTime.DayOfWeek + ((int) dateTime.DayOfWeek - (int) firstDayOfWeek < (intDayOfWeek.Sunday ? 7 : 0) - (int) firstDayOfWeek;
            return dateTime.AddDays(-dayOfWeek);
        }
 
        public static DateTime FirstDayOfYear(this DateTime current)
        {
            return current.SetDate(current.Year, 1, 1);
        }
 
        public static int GetDateTimeMonthDifference(DateTime startDate, DateTime endDate)
        {
            int month;
            try
            {
                int year = (endDate.Year - startDate.Year) * 12;
                month = endDate.Month - startDate.Month + year;
            }
            catch (Exception exception)
            {
                throw exception;
            }
            return month;
        }
 
        public static DateTime IncreaseTime(this DateTime startDate, TimeSpan toAdd)
        {
            return startDate + toAdd;
        }
 
        public static bool IsAfter(this DateTime current, DateTime toCompareWith)
        {
            return current > toCompareWith;
        }
 
        public static bool IsBefore(this DateTime current, DateTime toCompareWith)
        {
            return current < toCompareWith;
        }
 
        public static bool IsBetweenTwoTimes(this DateTime current, DateTime time1, DateTime time2)
        {
            DateTime dateTime = time1 > time2 ? time2 : time1;
            DateTime dateTime1 = time1 < time2 ? time2 : time1;
            if (current <= dateTime)
            {
                return false;
            }
            return current < dateTime1;
        }
 
        public static bool IsBiggerThan(this DateTime current, DateTime dateTime)
        {
            return current > dateTime;
        }
 
        public static bool IsInFuture(this DateTime dateTime)
        {
            return dateTime > DateTime.Now;
        }
 
        public static bool IsInPast(this DateTime dateTime)
        {
            return dateTime < DateTime.Now;
        }
 
        public static DateTime LastDayOfMonth(this DateTime current)
        {
            return current.SetDay(DateTime.DaysInMonth(current.Year, current.Month));
        }
 
        public static DateTime LastDayOfQuarter(this DateTime current)
        {
            int month = (current.Month - 1) / 3 + 1;
            DateTime dateTime = current.SetDate(current.Year, 3 * month - 2, 1);
            return dateTime.SetMonth(dateTime.Month + 2).LastDayOfMonth();
        }
 
        public static DateTime LastDayOfWeek(this DateTime current)
        {
            return current.FirstDayOfWeek().AddDays(6);
        }
 
        public static DateTime LastDayOfYear(this DateTime current)
        {
            return current.SetDate(current.Year, 12, 31);
        }
 
        public static DateTime Next(this DateTime start, DayOfWeek day)
        {
            do
            {
                start = start.NextDay();
            } while (start.DayOfWeek != day);
            return start;
        }
 
        public static DateTime NextDay(this DateTime start)
        {
            return start.AddDays(1);
        }
 
        public static DateTime NextMonth(this DateTime current)
        {
            int num = current.Month == 12 ? current.Year + 1 : current.Year;
            DateTime dateTime = current.SetDate(num, current.Month == 12 ? 1 : current.Month + 1, 1);
            int day = dateTime.LastDayOfMonth().Day;
            return dateTime.SetDay(current.Day > day ? day : current.Day);
        }
 
        public static DateTime NextWeek(this DateTime start)
        {
            return start.AddDays(7);
        }
 
        public static DateTime NextYear(this DateTime start)
        {
            int year = start.Year + 1;
            int num = DateTime.DaysInMonth(year, start.Month);
            if (num >= start.Day)
            {
                return new DateTime(year, start.Month, start.Day, start.Hour, start.Minute, start.Second, start.Millisecond, start.Kind);
            }
            int day = start.Day - num;
            DateTime dateTime = new DateTime(year, start.Month, num, start.Hour, start.Minute, start.Second, start.Millisecond, start.Kind);
            return dateTime.AddDays(day);
        }
 
        public static DateTime Noon(this DateTime value)
        {
            return value.SetTime(12, 0, 0, 0);
        }
 
        public static DateTime Previous(this DateTime start, DayOfWeek day)
        {
            do
            {
                start = start.PreviousDay();
            } while (start.DayOfWeek != day);
            return start;
        }
 
        public static DateTime PreviousDay(this DateTime start)
        {
            return start.AddDays(-1);
        }
 
        public static DateTime PreviousMonth(this DateTime current)
        {
            int num = current.Month == 1 ? current.Year - 1 : current.Year;
            DateTime dateTime = current.SetDate(num, current.Month == 1 ? 12 : current.Month - 1, 1);
            int day = dateTime.LastDayOfMonth().Day;
            return dateTime.SetDay(current.Day > day ? day : current.Day);
        }
 
        public static DateTime PreviousWeek(this DateTime start)
        {
            return start.AddDays(-7);
        }
 
        public static DateTime PreviousYear(this DateTime start)
        {
            int year = start.Year - 1;
            int num = DateTime.DaysInMonth(year, start.Month);
            if (num >= start.Day)
            {
                return new DateTime(year, start.Month, start.Day, start.Hour, start.Minute, start.Second, start.Millisecond, start.Kind);
            }
            int day = start.Day - num;
            DateTime dateTime = new DateTime(year, start.Month, num, start.Hour, start.Minute, start.Second, start.Millisecond, start.Kind);
            return dateTime.AddDays(day);
        }
 
        public static DateTime Round(this DateTime dateTime, RoundTo rt)
        {
            DateTime dateTime1;
            switch (rt)
            {
                case RoundTo.Second:
                {
                    dateTime1 = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Kind);
                    if (dateTime.Millisecond < 500)
                    {
                        break;
                    }
                    dateTime1 = dateTime1.AddSeconds(1);
                    break;
                }
                case RoundTo.Minute:
                {
                    dateTime1 = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, 0, dateTime.Kind);
                    if (dateTime.Second < 30)
                    {
                        break;
                    }
                    dateTime1 = dateTime1.AddMinutes(1);
                    break;
                }
                case RoundTo.Hour:
                {
                    dateTime1 = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 0, 0, dateTime.Kind);
                    if (dateTime.Minute < 30)
                    {
                        break;
                    }
                    dateTime1 = dateTime1.AddHours(1);
                    break;
                }
                case RoundTo.Day:
                {
                    dateTime1 = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 0, 0, 0, dateTime.Kind);
                    if (dateTime.Hour < 12)
                    {
                        break;
                    }
                    dateTime1 = dateTime1.AddDays(1);
                    break;
                }
                default:
                {
                    throw new ArgumentOutOfRangeException("rt");
                }
            }
            return dateTime1;
        }
 
        public static DateTime SetDate(this DateTime value, int year)
        {
            return new DateTime(year, value.Month, value.Day, value.Hour, value.Minute, value.Second, value.Millisecond, value.Kind);
        }
 
        public static DateTime SetDate(this DateTime value, int year, int month)
        {
            return new DateTime(year, month, value.Day, value.Hour, value.Minute, value.Second, value.Millisecond, value.Kind);
        }
 
        public static DateTime SetDate(this DateTime value, int year, int month, int day)
        {
            return new DateTime(year, month, day, value.Hour, value.Minute, value.Second, value.Millisecond, value.Kind);
        }
 
        public static DateTime SetDay(this DateTime value, int day)
        {
            return new DateTime(value.Year, value.Month, day, value.Hour, value.Minute, value.Second, value.Millisecond, value.Kind);
        }
 
        public static DateTime SetHour(this DateTime originalDate, int hour)
        {
            return new DateTime(originalDate.Year, originalDate.Month, originalDate.Day, hour, originalDate.Minute, originalDate.Second, originalDate.Millisecond, originalDate.Kind);
        }
 
        public static DateTime SetMillisecond(this DateTime originalDate, int millisecond)
        {
            return new DateTime(originalDate.Year, originalDate.Month, originalDate.Day, originalDate.Hour, originalDate.Minute, originalDate.Second, millisecond, originalDate.Kind);
        }
 
        public static DateTime SetMinute(this DateTime originalDate, int minute)
        {
            return new DateTime(originalDate.Year, originalDate.Month, originalDate.Day, originalDate.Hour, minute, originalDate.Second, originalDate.Millisecond, originalDate.Kind);
        }
 
        public static DateTime SetMonth(this DateTime value, int month)
        {
            return new DateTime(value.Year, month, value.Day, value.Hour, value.Minute, value.Second, value.Millisecond, value.Kind);
        }
 
        public static DateTime SetSecond(this DateTime originalDate, int second)
        {
            return new DateTime(originalDate.Year, originalDate.Month, originalDate.Day, originalDate.Hour, originalDate.Minute, second, originalDate.Millisecond, originalDate.Kind);
        }
 
        public static DateTime SetTime(this DateTime originalDate, int hour)
        {
            return new DateTime(originalDate.Year, originalDate.Month, originalDate.Day, hour, originalDate.Minute, originalDate.Second, originalDate.Millisecond, originalDate.Kind);
        }
 
        public static DateTime SetTime(this DateTime originalDate, int hour, int minute)
        {
            return new DateTime(originalDate.Year, originalDate.Month, originalDate.Day, hour, minute, originalDate.Second, originalDate.Millisecond, originalDate.Kind);
        }
 
        public static DateTime SetTime(this DateTime originalDate, int hour, int minute, int second)
        {
            return new DateTime(originalDate.Year, originalDate.Month, originalDate.Day, hour, minute, second, originalDate.Millisecond, originalDate.Kind);
        }
 
        public static DateTime SetTime(this DateTime originalDate, int hour, int minute, int second, int millisecond)
        {
            return new DateTime(originalDate.Year, originalDate.Month, originalDate.Day, hour, minute, second, millisecond, originalDate.Kind);
        }
 
        public static DateTime SetYear(this DateTime value, int year)
        {
            return new DateTime(year, value.Month, value.Day, value.Hour, value.Minute, value.Second, value.Millisecond, value.Kind);
        }
 
        public static DateTime SubtractBusinessDays(this DateTime current, int days)
        {
            return current.AddBusinessDays(-days);
        }
 
        public static DateTime ToDateTime(string date, string format = "yyyy-MM-dd")
        {
            DateTime dateTime;
            try
            {
                dateTime = DateTime.ParseExact(date, format, Thread.CurrentThread.CurrentCulture);
            }
            catch (Exception exception)
            {
                throw exception;
            }
            return dateTime;
        }
 
        public static string ToDateTimeStr(this string str, string format = "yyyy-MM-dd")
        {
            string empty;
            if (string.IsNullOrEmpty(str))
            {
                return string.Empty;
            }
            try
            {
                DateTime dateTime = DateTime.Parse(str);
                empty = dateTime.ToString(format, DateTimeFormatInfo.InvariantInfo);
            }
            catch
            {
                empty = string.Empty;
            }
            return empty;
        }
 
        public static string ToStringExt(this DateTime date, string Format = "yyyy-MM-dd")
        {
            Format = string.IsNullOrEmpty(Format) ? DefaultFormat : Format;
            return date.ToString(Format, DateTimeFormatInfo.InvariantInfo);
        }
    }
	public enum RoundTo
   {
       Second,
       Minute,
       Hour,
       Day
   }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值