using System; using System.Text; namespace CommonUtil { /// /// 扩展方法工具类/日期 /// public static partial class ExtendUtil { /// /// 转换为日期,null会转为DateTime最小值 /// /// 数据 /// 日期 public static DateTime ToDateTime(this string data) { if (data.IsNullOrEmpty()) { return DateTime.MinValue; } return DateTime.TryParse(data, out DateTime result) ? result : DateTime.MinValue; } /// /// 转换为可空日期 /// /// 数据 /// 可空日期 public static DateTime? ToDatetimeOrNull(this string data) { if (data.IsNullOrEmpty()) { return null; } return DateTime.TryParse(data, out DateTime result) ? (DateTime?)result : null; } /// /// 获取格式化时间字符串,带时分秒,格式:yyyy/MM/dd HH:mm:ss /// /// 日期 /// 是否移除秒 /// yyyy/MM/dd HH:mm:ss public static string ToDateTimeString(this DateTime dateTime, bool isRemoveSecond = false) { if (isRemoveSecond) { return dateTime.ToString("yyyy/MM/dd HH:mm"); } else { return dateTime.ToString("yyyy/MM/dd HH:mm:ss"); } } /// /// 获取格式化时间字符串,带时分秒,格式:yyyy/MM/dd HH:mm:ss /// /// 日期 /// yyyy/MM/dd HH:mm:ss public static string ToDateTimeStringWithOutMinute(this DateTime dateTime) { return dateTime.ToString("yyyy/MM/dd HH"); } /// /// 获取格式化时间字符串,带时分秒,格式:yyyy/MM/dd HH:mm:ss /// /// 日期 /// 是否移除秒 /// yyyy/MM/dd HH:mm:ss public static string ToDateTimeString(this DateTime? dateTime, bool isRemoveSecond = false) { return dateTime.HasValue ? ToDateTimeString(dateTime.Value, isRemoveSecond) : string.Empty; } /// /// 获取格式化时间字符串,不带时分秒,格式:yyyy/MM/dd /// /// 日期 /// yyyy/MM/dd public static string ToDateString(this DateTime dateTime) { return dateTime.ToString("yyyy/MM/dd"); } /// /// 获取格式化时间字符串,不带时分秒,格式:yyyy/MM/dd /// /// 日期 /// yyyy/MM/dd public static string ToDateString(this DateTime? dateTime) { return dateTime.HasValue ? ToDateString(dateTime.Value) : string.Empty; } /// /// 获取格式化时间字符串,不带年月日,格式:HH:mm:ss /// /// 日期 /// HH:mm:ss public static string ToTimeString(this DateTime dateTime) { return dateTime.ToString("HH:mm:ss"); } /// /// 获取格式化时间字符串,不带年月日,格式:HH:mm:ss /// /// 日期 /// HH:mm:ss public static string ToTimeString(this DateTime? dateTime) { return dateTime.HasValue ? ToTimeString(dateTime.Value) : string.Empty; } /// /// 获取格式化字符串,带毫秒,格式:yyyy/MM/dd HH:mm:ss.fff /// /// 日期 /// yyyy/MM/dd HH:mm:ss.fff" public static string ToMillisecondString(this DateTime dateTime) { return dateTime.ToString("yyyy/MM/dd HH:mm:ss.fff"); } /// /// 获取格式化字符串,带毫秒,格式:yyyy/MM/dd HH:mm:ss.fff /// /// 日期 /// yyyy/MM/dd HH:mm:ss.fff public static string ToMillisecondString(this DateTime? dateTime) { return dateTime.HasValue ? ToMillisecondString(dateTime.Value) : string.Empty; } /// /// 获取格式化字符串,不带时分秒,格式:yyyy年MM月dd日 /// /// 日期 /// yyyy年MM月dd日 public static string ToCNDateString(this DateTime dateTime) { return string.Format("{0}年{1}月{2}日", dateTime.Year, dateTime.Month, dateTime.Day); } /// /// 获取格式化字符串,不带时分秒,格式:yyyy年MM月dd日 /// /// 日期 /// yyyy年MM月dd日 public static string ToCNDateString(this DateTime? dateTime) { return dateTime.HasValue ? ToCNDateString(dateTime.Value) : string.Empty; } /// /// 获取格式化字符串,带时分秒,格式:yyyy年MM月dd日 HH时mm分ss秒 /// /// 日期 /// 是否移除秒 /// yyyy年MM月dd日 HH时mm分ss秒 public static string ToCNDateTimeString(this DateTime dateTime, bool isRemoveSecond = false) { StringBuilder result = new StringBuilder(); result.AppendFormat("{0}年{1}月{2}日", dateTime.Year, dateTime.Month, dateTime.Day); result.AppendFormat(" {0}时{1}分", dateTime.Hour, dateTime.Minute); if (!isRemoveSecond) { result.AppendFormat("{0}秒", dateTime.Second); } return result.ToString(); } /// /// 获取格式化字符串,带时分秒,格式:yyyy年MM月dd日 HH时mm分ss秒 /// /// 日期 /// 是否移除秒 /// yyyy年MM月dd日 HH时mm分ss秒 public static string ToCNDateTimeString(this DateTime? dateTime, bool isRemoveSecond = false) { return dateTime.HasValue ? ToCNDateTimeString(dateTime.Value, isRemoveSecond) : string.Empty; } /// /// 将Unix时间戳转换为DateTime类型时间 /// /// 整型数字 /// DateTime public static DateTime ToDateTimeSeconds(this long unixTime) { var dto = DateTimeOffset.FromUnixTimeSeconds(unixTime); return dto.ToLocalTime().DateTime; } /// /// 将Unix时间戳转换为DateTime类型时间 /// /// 整型数字 /// DateTime public static DateTime ToDateTime(this long unixTime) { var dto = DateTimeOffset.FromUnixTimeMilliseconds(unixTime); return dto.ToLocalTime().DateTime; } /// /// 将DateTime时间格式转换为Unix时间戳格式 /// /// 时间 /// long public static long EncodeUnix(this DateTime time) { return new DateTimeOffset(time).ToUnixTimeSeconds(); } /// /// 将DateTime时间格式转换为Unix时间戳格式(毫秒) /// /// DateTime时间 /// long public static long EncodeUnixMillisecond(this DateTime time) { return new DateTimeOffset(time).ToUnixTimeMilliseconds(); } /// /// 获取指定星期的日期 /// /// 时间 /// 星期 /// 下周:1,下下周:2,上周:0 /// DateTime public static DateTime GetWeekUpOfDate(this DateTime dt, int weekday, int Number) { int wd1 = weekday; int wd2 = (int)dt.DayOfWeek; return wd2 == wd1 ? dt.AddDays(7 * Number) : dt.AddDays(7 * Number / wd2 + wd1); } } }