简单日期类
来源:互联网 发布:四级听力知乎 编辑:程序博客网 时间:2024/06/05 14:20
简化 DateTime 操作
/// <summary> /// 简单日期类 /// </summary> [Serializable, StructLayout(LayoutKind.Auto)] public struct SmartDate : IComparable { private const string SmartDateT = "t"; private const string SmartDateToday = "today"; private const string SmartDateY = "y"; private const string SmartDateYesterday = "yesterday"; private const string SmartDateTom = "tom"; private const string SmartDateTomorrow = "tomorrow"; private const string ValueNotSmartDateException = "该对象不是SmartDate类型"; private const string StringToDateException = "输入的字符串不是日期类型"; private DateTime date; private bool initialized; private SmartDate.EmptyValue emptyValue; private string format; private static string defaultFormat; /// <summary> /// 获取简单日期文本 /// </summary> public string Text { get { return SmartDate.DateToString(this.Date, this.FormatString, this.emptyValue); } set { this.Date = SmartDate.StringToDate(value, this.emptyValue); } } /// <summary> /// 是否为空日期值 /// </summary> public bool IsEmpty { get { if (this.emptyValue == SmartDate.EmptyValue.MinDate) { return this.Date.Equals(DateTime.MinValue); } return this.Date.Equals(DateTime.MaxValue); } } /// <summary> /// 日期格式化规则 /// </summary> public string FormatString { get { if (this.format == null) { this.format = SmartDate.defaultFormat; } return this.format; } set { this.format = value; } } /// <summary> /// 空值是否为最少日期 /// </summary> public bool EmptyIsMin { get { return this.emptyValue == SmartDate.EmptyValue.MinDate; } } /// <summary> /// 数据库的值 /// </summary> public object DBValue { get { if (this.IsEmpty) { return DBNull.Value; } return this.Date; } } /// <summary> /// 获取时间类 /// </summary> public DateTime Date { get { if (!this.initialized) { this.date = DateTime.MinValue; this.initialized = true; } return this.date; } set { this.date = value; this.initialized = true; } } /// <summary> /// 字符串转换为日期 /// </summary> /// <param name="value">字符串值</param> /// <param name="emptyValue">日期空值标识</param> /// <param name="result">返回时间结果</param> /// <returns>转换是否成功</returns> private static bool TryStringToDate(string value, SmartDate.EmptyValue emptyValue, ref DateTime result) { DateTime time1; if (string.IsNullOrEmpty(value)) { if (emptyValue == SmartDate.EmptyValue.MinDate) { result = DateTime.MinValue; return true; } result = DateTime.MaxValue; return true; } if (DateTime.TryParse(value, out time1)) { result = time1; return true; } string text1 = value.Trim().ToLower(); if (((text1 == SmartDateT) || (text1 == SmartDateToday)) || (text1 == ".?")) { result = DateTime.Now; return true; } if (((text1 == SmartDateY) || (text1 == SmartDateYesterday)) || (text1 == "-?")) { result = DateTime.Now.AddDays(-1); return true; } if (((text1 != SmartDateTom) && (text1 != SmartDateTomorrow)) && (text1 != "+?")) { return false; } result = DateTime.Now.AddDays(1); return true; } /// <summary> /// 字符串转换为简单日期 /// </summary> /// <param name="value">日期字符串</param> /// <param name="result">返回简单日期</param> /// <returns>转换是否成功</returns> public static bool TryParse(string value, ref SmartDate result) { return SmartDate.TryParse(value, SmartDate.EmptyValue.MinDate, ref result); } /// <summary> /// 字符串转换为简单日期 /// </summary> /// <param name="value">日期字符串</param> /// <param name="emptyValue">日期空值标识</param> /// <param name="result">返回简单日期</param> /// <returns>转换是否成功</returns> public static bool TryParse(string value, SmartDate.EmptyValue emptyValue, ref SmartDate result) { DateTime time1 = DateTime.MinValue; if (SmartDate.TryStringToDate(value, emptyValue, ref time1)) { result = new SmartDate(time1, emptyValue); return true; } return false; } /// <summary> /// 简单日期转换为字符串 /// </summary> /// <param name="format">格式化规则</param> /// <returns></returns> public string ToString(string format) { return SmartDate.DateToString(this.Date, format, this.emptyValue); } /// <summary> /// 返回表示当前 MTFramework.Utils.SmartDate 的 System.String。 /// </summary> /// <returns>返回 MTFramework.Utils.SmartDate 的 System.String 值</returns> public override string ToString() { return this.Text; } /// <summary> /// 比较简单日期 /// </summary> /// <param name="value">简单日期对象</param> /// <returns></returns> public int CompareTo(object value) { if (!(value is SmartDate)) { throw new ArgumentException(ValueNotSmartDateException); } return this.CompareTo((SmartDate)value); } /// <summary> /// 从此实例中减去指定持续时间 /// </summary> /// <param name="value">从此实例中减去指定持续时间</param> /// <returns>System.DateTime,它等于此实例所表示的日期和时间减去 value 所表示的时间间隔</returns> public DateTime Subtract(TimeSpan value) { if (this.IsEmpty) { return this.Date; } return this.Date.Subtract(value); } /// <summary> /// 从此实例中减去指定的日期和时间 /// </summary> /// <param name="value">System.DateTime 的一个实例</param> /// <returns>System.TimeSpan 间隔,它等于此实例所表示的日期和时间减去 value 所表示的日期和时间</returns> public TimeSpan Subtract(DateTime value) { if (this.IsEmpty) { return TimeSpan.Zero; } return this.Date.Subtract(value); } /// <summary> /// 日期字符串转换为日期 /// </summary> /// <param name="value">日期字符串</param> /// <param name="emptyValue">日期空值标识</param> /// <returns>日期对象</returns> public static DateTime StringToDate(string value, SmartDate.EmptyValue emptyValue) { DateTime time1 = DateTime.MinValue; if (!SmartDate.TryStringToDate(value, emptyValue, ref time1)) { throw new ArgumentException(StringToDateException); } return time1; } /// <summary> /// 日期字符串转换为日期 /// </summary> /// <param name="value">日期字符串</param> /// <param name="emptyIsMin">如果转换为空返回最少值</param> /// <returns></returns> public static DateTime StringToDate(string value, bool emptyIsMin) { return SmartDate.StringToDate(value, SmartDate.GetEmptyValue(emptyIsMin)); } /// <summary> /// 设置空值数据 /// </summary> /// <param name="emptyValue">日期空值标识</param> private void SetEmptyDate(SmartDate.EmptyValue emptyValue) { if (emptyValue == SmartDate.EmptyValue.MinDate) { this.Date = DateTime.MinValue; } else { this.Date = DateTime.MaxValue; } } /// <summary> /// 设置默认的日期格式化规则 /// </summary> /// <param name="formatString">日期格式化规则</param> public static void SetDefaultFormatString(string formatString) { SmartDate.defaultFormat = formatString; } /// <summary> /// 简单日期转换 /// </summary> /// <param name="value">日期字符串</param> /// <param name="emptyValue">日期空值标识</param> /// <returns>简单日期</returns> public static SmartDate Parse(string value, SmartDate.EmptyValue emptyValue) { return new SmartDate(value, emptyValue); } /// <summary> /// 简单日期转换 /// </summary> /// <param name="value">日期字符串</param> /// <param name="emptyIsMin">如果转换为空返回最少值</param> /// <returns>简单日期</returns> public static SmartDate Parse(string value, bool emptyIsMin) { return new SmartDate(value, emptyIsMin); } /// <summary> /// 简单日期转换 /// </summary> /// <param name="value">日期字符串</param> /// <returns>简单日期</returns> public static SmartDate Parse(string value) { return new SmartDate(value); } /// <summary> /// 简单日期计算 /// </summary> /// <param name="start">简单日期</param> /// <param name="span">时间间隔</param> /// <returns>计算结果</returns> public static SmartDate operator +(SmartDate start, TimeSpan span) { return new SmartDate(start.Add(span), start.EmptyIsMin); } /// <summary> /// 简单日期计算 /// </summary> /// <param name="start">简单日期</param> /// <param name="finish">简单日期</param> /// <returns>计算结果</returns> public static SmartDate operator +(SmartDate start, SmartDate finish) { return new SmartDate(start.Add(finish.Date.TimeOfDay)); } /// <summary> /// 简单日期计算 /// </summary> /// <param name="start">简单日期</param> /// <param name="span">时间间隔</param> /// <returns>简单日期计算结果</returns> public static SmartDate operator -(SmartDate start, TimeSpan span) { return new SmartDate(start.Subtract(span), start.EmptyIsMin); } /// <summary> /// 简单日期计算 /// </summary> /// <param name="start">简单日期</param> /// <param name="finish">减去的简单日期</param> /// <returns>时间间隔</returns> public static TimeSpan operator -(SmartDate start, SmartDate finish) { return start.Subtract(finish.Date); } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">日期字符串</param> /// <returns>比较结果</returns> public static bool operator <=(SmartDate obj1, string obj2) { return obj1.CompareTo(obj2) <= 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">简单日期对象</param> /// <returns>比较结果</returns> public static bool operator <=(SmartDate obj1, SmartDate obj2) { return obj1.CompareTo(obj2) <= 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">时间对象</param> /// <returns>比较结果</returns> public static bool operator <=(SmartDate obj1, DateTime obj2) { return obj1.CompareTo(obj2) <= 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">日期字符串</param> /// <returns>比较结果</returns> public static bool operator <(SmartDate obj1, string obj2) { return obj1.CompareTo(obj2) < 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">简单日期对象</param> /// <returns>比较结果</returns> public static bool operator <(SmartDate obj1, SmartDate obj2) { return obj1.CompareTo(obj2) < 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">时间对象</param> /// <returns>比较结果</returns> public static bool operator <(SmartDate obj1, DateTime obj2) { return obj1.CompareTo(obj2) < 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">日期字符串</param> /// <returns>比较结果</returns> public static bool operator !=(SmartDate obj1, string obj2) { return !obj1.Equals(obj2); } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">简单日期对象</param> /// <returns>比较结果</returns> public static bool operator !=(SmartDate obj1, SmartDate obj2) { return !obj1.Equals(obj2); } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">日期对象</param> /// <returns>比较结果</returns> public static bool operator !=(SmartDate obj1, DateTime obj2) { return !obj1.Equals(obj2); } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">日期字符串</param> /// <returns>比较结果</returns> public static bool operator >=(SmartDate obj1, string obj2) { return obj1.CompareTo(obj2) >= 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">简单日期对象</param> /// <returns>比较结果</returns> public static bool operator >=(SmartDate obj1, SmartDate obj2) { return obj1.CompareTo(obj2) >= 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">日期对象</param> /// <returns>比较结果</returns> public static bool operator >=(SmartDate obj1, DateTime obj2) { return obj1.CompareTo(obj2) >= 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">日期字符串</param> /// <returns>比较结果</returns> public static bool operator >(SmartDate obj1, string obj2) { return obj1.CompareTo(obj2) > 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">简单日期对象</param> /// <returns>比较结果</returns> public static bool operator >(SmartDate obj1, SmartDate obj2) { return obj1.CompareTo(obj2) > 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">日期对象</param> /// <returns>比较结果</returns> public static bool operator >(SmartDate obj1, DateTime obj2) { return obj1.CompareTo(obj2) > 0; } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">日期字符串</param> /// <returns>比较结果</returns> public static bool operator ==(SmartDate obj1, string obj2) { return obj1.Equals(obj2); } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">简单日期对象</param> /// <returns>比较结果</returns> public static bool operator ==(SmartDate obj1, SmartDate obj2) { return obj1.Equals(obj2); } /// <summary> /// 简单日期比较 /// </summary> /// <param name="obj1">简单日期对象</param> /// <param name="obj2">日期对象</param> /// <returns>比较结果</returns> public static bool operator ==(SmartDate obj1, DateTime obj2) { return obj1.Equals(obj2); } /// <summary> /// 获取对象的哈希值 /// </summary> /// <returns></returns> public override int GetHashCode() { return this.Date.GetHashCode(); } /// <summary> /// 获取简单日期空值数据 /// </summary> /// <param name="emptyIsMin">空置类型</param> /// <returns></returns> private static SmartDate.EmptyValue GetEmptyValue(bool emptyIsMin) { if (emptyIsMin) { return SmartDate.EmptyValue.MinDate; } return SmartDate.EmptyValue.MaxDate; } /// <summary> /// 简单日期对象比较 /// </summary> /// <param name="obj">简单日期对象</param> /// <returns>比较结果</returns> public override bool Equals(object obj) { if (obj is SmartDate) { SmartDate date1 = (SmartDate)obj; if (this.IsEmpty && date1.IsEmpty) { return true; } return this.Date.Equals(date1.Date); } if (obj is DateTime) { return this.Date.Equals((DateTime)obj); } if (obj is string) { return this.CompareTo(obj.ToString()) == 0; } return false; } /// <summary> /// 日期的字符串表示方式 /// </summary> /// <param name="value">日期</param> /// <param name="formatString">格式化规则</param> /// <param name="emptyValue">日期空值标识</param> /// <returns>日期字符串</returns> public static string DateToString(DateTime value, string formatString, SmartDate.EmptyValue emptyValue) { if (emptyValue == SmartDate.EmptyValue.MinDate) { if (value == DateTime.MinValue) { return string.Empty; } } else { if (value == DateTime.MaxValue) { return string.Empty; } } return string.Format("{0:?" + formatString + "}?", value); } /// <summary> /// 日期的字符串表示方式 /// </summary> /// <param name="value">日期</param> /// <param name="formatString">格式化规则</param> /// <param name="emptyIsMin">日期空值标识</param> /// <returns>日期字符串</returns> public static string DateToString(DateTime value, string formatString, bool emptyIsMin) { return SmartDate.DateToString(value, formatString, SmartDate.GetEmptyValue(emptyIsMin)); } /// <summary> /// 日期的字符串表示方式 /// </summary> /// <param name="value">日期</param> /// <param name="formatString">格式化规则</param> /// <returns>日期字符串</returns> public static string DateToString(DateTime value, string formatString) { return SmartDate.DateToString(value, formatString, true); } /// <summary> /// 日期比较 /// </summary> /// <param name="value">日期字符串</param> /// <returns>比较结果</returns> public int CompareTo(string value) { return this.Date.CompareTo(SmartDate.StringToDate(value, this.emptyValue)); } /// <summary> /// 日期比较 /// </summary> /// <param name="value">简单日期</param> /// <returns>比较结果</returns> public int CompareTo(SmartDate value) { if (this.IsEmpty && value.IsEmpty) { return 0; } return this.date.CompareTo(value.Date); } /// <summary> /// 日期比较 /// </summary> /// <param name="value">日期</param> /// <returns>比较结果</returns> public int CompareTo(DateTime value) { return this.Date.CompareTo(value); } /// <summary> /// 递增时间间隔 /// </summary> /// <param name="value">时间间隔</param> /// <returns>递增后的日期</returns> public DateTime Add(TimeSpan value) { if (this.IsEmpty) { return this.Date; } return this.Date.Add(value); } /// <summary> /// 构造方法 /// </summary> /// <param name="value">日期字符串</param> /// <param name="emptyValue">日期空值标识</param> public SmartDate(string value, SmartDate.EmptyValue emptyValue) { this.emptyValue = emptyValue; this.format = null; this.initialized = true; this.date = DateTime.MinValue; this.Text = value; } /// <summary> /// 构造方法 /// </summary> /// <param name="value">日期字符串</param> /// <param name="emptyIsMin">日期空值标识</param> public SmartDate(string value, bool emptyIsMin) { this.emptyValue = SmartDate.GetEmptyValue(emptyIsMin); this.format = null; this.initialized = true; this.date = DateTime.MinValue; this.Text = value; } /// <summary> /// 构造方法 /// </summary> /// <param name="value">日期字符串</param> public SmartDate(string value) { this.emptyValue = SmartDate.EmptyValue.MinDate; this.format = null; this.initialized = true; this.date = DateTime.MinValue; this.Text = value; } /// <summary> /// 构造方法 /// </summary> /// <param name="emptyValue">日期空值标识</param> public SmartDate(SmartDate.EmptyValue emptyValue) { this.emptyValue = emptyValue; this.format = null; this.initialized = false; this.date = DateTime.MinValue; this.SetEmptyDate(emptyValue); } /// <summary> /// 构造方法 /// </summary> /// <param name="value">日期</param> /// <param name="emptyValue">日期空值标识</param> public SmartDate(DateTime value, SmartDate.EmptyValue emptyValue) { this.emptyValue = emptyValue; this.format = null; this.initialized = false; this.date = DateTime.MinValue; this.Date = value; } /// <summary> /// 构造方法 /// </summary> /// <param name="value">日期</param> /// <param name="emptyIsMin">日期空值标识</param> public SmartDate(DateTime value, bool emptyIsMin) { this.emptyValue = SmartDate.GetEmptyValue(emptyIsMin); this.format = null; this.initialized = false; this.date = DateTime.MinValue; this.Date = value; } /// <summary> /// 构造方法 /// </summary> /// <param name="value">日期</param> public SmartDate(DateTime value) { this.emptyValue = SmartDate.EmptyValue.MinDate; this.format = null; this.initialized = false; this.date = DateTime.MinValue; this.Date = value; } /// <summary> /// 构造方法 /// </summary> /// <param name="emptyIsMin">日期空值标识</param> public SmartDate(bool emptyIsMin) { this.emptyValue = SmartDate.GetEmptyValue(emptyIsMin); this.format = null; this.initialized = false; this.date = DateTime.MinValue; this.SetEmptyDate(this.emptyValue); } /// <summary> /// 构造方法 /// </summary> static SmartDate() { SmartDate.defaultFormat = "d?"; } /// <summary> /// 日期空值标识 /// </summary> public enum EmptyValue { /// <summary> /// 最少日期 /// </summary> MinDate = 0, /// <summary> /// 最大日期 /// </summary> MaxDate = 1 } }
- 简单日期类
- 简单日期类C++
- Java 日期简单工具类
- 日期类的简单实现
- 简单日期类(文件)
- 简单日期
- 利用C++日期类实现简单的日期计算器
- 一个简单的日期操作类
- C++实现的简单日期类
- 类实现一个简单的日期计算器
- 日期类和简单的Collection
- C++实现简单的日期类
- 常用类日期处理、简单日历制作
- 简单日期类操作(c++)
- java8简单日期时间工具类
- 简单的日期javascript
- 简单日期处理
- 日期的简单输出
- 分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)
- 详解_C语言可变参数_va_list和_vsnprintf及printf实现
- nginx概述
- poj-1113-Wall(凸包问题)
- 二叉链表的创建
- 简单日期类
- Android 项目中文件夹作用(res文件夹详细介绍)
- IIS Service Unavailable
- Intel显卡驱动 FOR Linux官网
- HTTP协议中session与cookie的联系与区别
- D3DLOCK_NOOVERWRITE + D3DLOCK_DISCARD 的一个用处
- 当哪种公司做什么性质的销售才能够拿到高工资的探讨
- (转圈提醒)UIActivityIndicatorView、UIProgressView 活动与进度指示器
- jQuery LigerUI 初次发布&一睹为快(提供Demo下载)