NEXTDAY 封装思想


using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

namespace lrh
{
    /// <summary>
    /// 用面向对象的思想封装date
    /// 作者:Wany_
    /// </summary>
    class Date
    {
        private int _year;
        private int _month;
        private int _day;
        private ErrorLog _log;  //错误日志
        private int[] dayTable = new int[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        private int maxyear = 2050;
        private int minyear = 1800;
        private bool isTrueDate = true;
        public int Year { get {return this._year; } }
        public int Month { get { return this._month; } }
        public int Day { get { return this._day; } }
        public Date() { }//请不要使用此构造函数
        public Date(string year, string month, string day)
        {
            ErrorLog ElooF = new ErrorLogOutOfFormat();
            if (toInt(ref this._year, year, ElooF) && toInt(ref this._month, month, ElooF) && toInt(ref this._day, day, ElooF))//类型转换成功
            {
                ErrorLog ElooY = new ErrorLogOutOfYear();
                ErrorLog ElooM = new ErrorLogOutOfMonth();
                ErrorLog ElooD = new ErrorLogOutOfDay();
                if (setYear(this._year, ElooY) && setMonth(this._month, ElooM) && setDay(this._day, ElooD))//日期输入正确
                {
                    this.isTrueDate = true;
                    return;
                }
            }
            this.isTrueDate = false;
        }
        static public bool isaDate(int year, int month, int day)//判断该日期是否存在
        {
            int[] daytable = new int[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
            {
                daytable[1] = 29;
            }
            if (month >= 1 && month <= 12)
            {
                if (day >= 1 && day <= daytable[month - 1])
                    return true;
            }
            return false;
        }
        public override string ToString()
        {
            if (this.isTrueDate)
                return "Tomorrow's date is:" + this._year.ToString() + "-" + this._month.ToString() + "-" + this._day.ToString();
            return this._log.ToString();
        }
        public static T DeepCopy<T>(T obj)
        {
            //如果是字符串或值类型则直接返回
            if (obj is string || obj.GetType().IsValueType) return obj;

            object retval = Activator.CreateInstance(obj.GetType());
            FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
            foreach (FieldInfo field in fields)
            {
                try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); }
                catch { }
            }
            return (T)retval;
        }
        public Date nextDay()//返回当前日期的下一天
        {
            Date nextday = Date.DeepCopy<Date>(this);
            nextday.toNextDay();
            return nextday;
        }
        private void toNextDay()//把当前日期变成下一天
        {
            if (this.isTrueDate)
            {
                this._day++;
                if (!Date.isaDate(this._year, this._month, this._day))
                {
                    this._day = 1;
                    this._month++;
                    if (!Date.isaDate(this._year, this._month, this._day))
                    {
                        this._month = 1;
                        this._year++;
                    }
                }
            }
        }
        private bool setYear(int year, ErrorLog log)//判断年是否符合规定
        {
            if (year >= this.minyear && year <= this.maxyear)
            {
                return true;
            }
            else
            {
                this._log = log;
                return false;
            }
        }
        private bool setMonth(int month, ErrorLog log)//判断月是否符合规定
        {
            if (month >= 1 && month <= 12)
            {
                if (Date.isLeapYear(this._year))
                    this.dayTable[1] = 29;
                return true;
            }
            else
            {
                this._log = log;
                return false;
            }
        }
        private bool setDay(int day, ErrorLog log)//判断日是否符合规定
        {
            if (day >= 1 && day <= this.dayTable[this._month - 1])
                return true;
            else
            {
                this._log = log;
                return false;
            }
        }
        private bool toInt(ref int x, string str, ErrorLog log)//将str转换成int型并赋值给x,若失败则false,并显示错误信息
        {
            int result;
            if (Int32.TryParse(str, out result))
            {
                x = result;
                return true;
            }
            else
            {
                this.isTrueDate = false;
                this._log = log;
                return false;
            }
        }
        private static bool isLeapYear(int year)//判断该年是否为闰年
        {
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
                return true;
            return false;
        }
    }
}


错误信息类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lrh
{
    class ErrorLog
    {
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lrh
{
     class ErrorLogOutOfYear:ErrorLog
    {
        static public string Message = "请填入一个在1800和2050之间的整数";
        public override string ToString()
        {
            return ErrorLogOutOfYear.Message;
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lrh
{
    class ErrorLogOutOfMonth:ErrorLog
    {
        static public string Message = "请填入一个在1和12之间的整数";
        public override string ToString()
        {
            return ErrorLogOutOfMonth.Message;
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lrh
{
    class ErrorLogOutOfDay:ErrorLog
    {
        static private string Message = "该日期不存在";
        public override string ToString()
        {
            return ErrorLogOutOfDay.Message;
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lrh
{
    class ErrorLogOutOfFormat:ErrorLog
    {
        static public string Message = "格式输入不正确";
        public override string ToString()
        {
            return ErrorLogOutOfFormat.Message;
        }
    }
}


转载请注明出处: 点击打开链接
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值