网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using System;

namespace Dpz.Core.Infrastructure
{
    public struct Date:IFormattable
    {
        public Date(int year,int month,int day)
        {
            Year = year;
            Month = month;
            Day = day;
        }

        public int Year { get; set; }
        
        public int Month { get; set; }
        
        public int Day { get; set; }

        public override string ToString()
        {
            return ToDateTime(this).ToString("yyyy-MM-dd");
        }

        public string ToString(string? format, IFormatProvider? formatProvider)
        {
            return ToDateTime(this).ToString(format, formatProvider);
        }

        public string ToString(string format)
        {
            return ToDateTime(this).ToString(format);
        }

        public Date AddDay(int day)
        {
            var date = ToDateTime(this).AddDays(day);
            return new Date { Day = date.Day, Month = date.Month, Year = date.Year };
        }

        public Date AddMonth(int month)
        {
            var date = ToDateTime(this).AddMonths(month);
            return new Date { Day = date.Day, Month = date.Month, Year = date.Year };
        }
        
        public Date AddYear(int year)
        {
            var date = ToDateTime(this).AddYears(year);
            return new Date { Day = date.Day, Month = date.Month, Year = date.Year };
        }

        public static Date ToDate(DateTime dateTime)
        {
            return new Date(dateTime.Year, dateTime.Month, dateTime.Day);
        }

        public static DateTime ToDateTime(Date date)
        {
            return new DateTime(date.Year, date.Month, date.Day);
        }
        
        public override bool Equals(object? obj)
        {
            if (obj == null) return false;
            if (obj is Date date)
            {
                return date.Year == Year && date.Month == Month && date.Day == Day;
            }
            return false;
        }

        public bool Equals(Date other)
        {
            return Year == other.Year && Month == other.Month && Day == other.Day;
        }

        public override int GetHashCode()
        {
            return HashCode.Combine(Year, Month, Day);
        }

        public static Date operator +(Date lhs, TimeSpan t)
        {
            var dtLhs = ToDateTime(lhs);
            var result = dtLhs + t;
            return new Date(result.Year,result.Month,result.Day);
        }

        public static TimeSpan operator -(Date lhs, Date rhs)
        {
            var dtLhs = ToDateTime(lhs);
            var dtRhs = ToDateTime(rhs);
            var result = dtLhs - dtRhs;
            return result;
        }

        public static bool operator ==(Date d1, Date d2) => d1.Equals(d2);

        public static bool operator !=(Date d1, Date d2) => !d1.Equals(d2);

        public static bool operator <(Date d1, Date d2)
        {
            var t1 = ToDateTime(d1);
            var t2 = ToDateTime(d2);
            return t1 < t2;
        }

        public static bool operator <=(Date d1, Date d2)
        {
            var t1 = ToDateTime(d1);
            var t2 = ToDateTime(d2);
            return t1 <= t2;
        }

        public static bool operator >(Date d1, Date d2)
        {
            var t1 = ToDateTime(d1);
            var t2 = ToDateTime(d2);
            return t1 > t2;
        }

        public static bool operator >=(Date d1, Date d2)
        {
            var t1 = ToDateTime(d1);
            var t2 = ToDateTime(d2);
            return t1 >= t2;
        }
    }
}
loading