using System; namespace Masuit.Tools.DateTimeExt { /// /// 日期操作工具类 /// public static class DateUtil { private static readonly DateTime Start1970 = DateTime.Parse("1970-01-01 00:00:00"); /// /// 返回相对于当前时间的相对天数 /// /// /// 相对天数 public static string GetDateTime(this DateTime dt, int relativeday) { return dt.AddDays(relativeday).ToString("yyyy-MM-dd HH:mm:ss"); } /// /// 返回标准时间格式string /// public static string GetDateTimeF(this DateTime dt) => dt.ToString("yyyy-MM-dd HH:mm:ss:fffffff"); /// /// 返回标准时间 /// /// 日期时间字符串 /// 格式 public static string GetStandardDateTime(this string fDateTime, string formatStr) { if (fDateTime == "0000-0-0 0:00:00") { return fDateTime; } var s = Convert.ToDateTime(fDateTime); return s.ToString(formatStr); } /// /// 返回标准时间 yyyy-MM-dd HH:mm:ss /// /// 日期时间字符串 public static string GetStandardDateTime(this string fDateTime) { return GetStandardDateTime(fDateTime, "yyyy-MM-dd HH:mm:ss"); } /// /// 获取该时间相对于1970-01-01 00:00:00的秒数 /// /// /// public static double GetTotalSeconds(this DateTime dt) => (dt - Start1970).TotalSeconds; /// /// 获取该时间相对于1970-01-01 00:00:00的毫秒数 /// /// /// public static double GetTotalMilliseconds(this DateTime dt) => (dt - Start1970).TotalMilliseconds; /// /// 获取该时间相对于1970-01-01 00:00:00的分钟数 /// /// /// public static double GetTotalMinutes(this DateTime dt) => (dt - Start1970).TotalMinutes; /// /// 获取该时间相对于1970-01-01 00:00:00的小时数 /// /// /// public static double GetTotalHours(this DateTime dt) => (dt - Start1970).TotalHours; /// /// 获取该时间相对于1970-01-01 00:00:00的天数 /// /// /// public static double GetTotalDays(this DateTime dt) => (dt - Start1970).TotalDays; /// /// 返回本年有多少天 /// /// /// 年份 /// 本年的天数 public static int GetDaysOfYear(this DateTime _, int iYear) { return IsRuYear(iYear) ? 366 : 365; } /// 本年有多少天 /// 日期 /// 本天在当年的天数 public static int GetDaysOfYear(this DateTime dt) { //取得传入参数的年份部分,用来判断是否是闰年 int n = dt.Year; if (IsRuYear(n)) { //闰年多 1 天 即:2 月为 29 天 return 366; } else { //--非闰年少1天 即:2 月为 28 天 return 365; } } /// 本月有多少天 /// /// 年 /// 月 /// 天数 public static int GetDaysOfMonth(this DateTime _, int iYear, int month) { int days = 0; switch (month) { case 1: days = 31; break; case 2: days = IsRuYear(iYear) ? 29 : 28; break; case 3: days = 31; break; case 4: days = 30; break; case 5: days = 31; break; case 6: days = 30; break; case 7: case 8: days = 31; break; case 9: days = 30; break; case 10: days = 31; break; case 11: days = 30; break; case 12: days = 31; break; } return days; } /// 本月有多少天 /// 日期 /// 天数 public static int GetDaysOfMonth(this DateTime dt) { //--------------------------------// //从dt中取得当前的年,月信息 --// //--------------------------------// int days = 0; var year = dt.Year; var month = dt.Month; //--利用年月信息,得到当前月的天数信息。 switch (month) { case 1: days = 31; break; case 2: days = IsRuYear(year) ? 29 : 28; break; case 3: days = 31; break; case 4: days = 30; break; case 5: days = 31; break; case 6: days = 30; break; case 7: days = 31; break; case 8: days = 31; break; case 9: days = 30; break; case 10: days = 31; break; case 11: days = 30; break; case 12: days = 31; break; } return days; } /// 返回当前日期的星期名称 /// 日期 /// 星期名称 public static string GetWeekNameOfDay(this DateTime idt) { string week = ""; var dt = idt.DayOfWeek.ToString(); switch (dt) { case "Mondy": week = "星期一"; break; case "Tuesday": week = "星期二"; break; case "Wednesday": week = "星期三"; break; case "Thursday": week = "星期四"; break; case "Friday": week = "星期五"; break; case "Saturday": week = "星期六"; break; case "Sunday": week = "星期日"; break; } return week; } /// 返回当前日期的星期编号 /// 日期 /// 星期数字编号 public static string GetWeekNumberOfDay(this DateTime idt) { string week = ""; var dt = idt.DayOfWeek.ToString(); switch (dt) { case "Mondy": week = "1"; break; case "Tuesday": week = "2"; break; case "Wednesday": week = "3"; break; case "Thursday": week = "4"; break; case "Friday": week = "5"; break; case "Saturday": week = "6"; break; case "Sunday": week = "7"; break; } return week; } /// 判断当前年份是否是闰年,私有函数 /// 年份 /// 是闰年:True ,不是闰年:False private static bool IsRuYear(int iYear) { //形式参数为年份 //例如:2003 var n = iYear; return n % 400 == 0 || n % 4 == 0 && n % 100 != 0; } /// /// 判断是否为合法日期,必须大于1800年1月1日 /// /// 输入日期字符串 /// True/False public static bool IsDateTime(this string strDate) { DateTime.TryParse(strDate, out var result); return result.CompareTo(DateTime.Parse("1800-1-1")) > 0; } } }