using System; using System.Globalization; namespace Common { public class DateTimeHelper { public static string GetToday() { return DateTime.Now.ToString("yyyy-MM-dd"); } public static string GetToday(string format) { return DateTime.Now.ToString(format); } public static string GetDate(int i) { return DateTime.Now.AddDays((double)i).ToString("yyyy-MM-dd"); } public static string GetNumberWeekDay(DateTime dt) { int y = dt.Year; int i = dt.Month; int d = dt.Day; if (i < 3) { i += 12; y--; } if (y % 400 == 0 || (y % 100 != 0 && y % 4 == 0)) { d--; } else { d++; } return ((d + 2 * i + 3 * (i + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7).ToString(); } public string GetChineseWeekDay(int y, int m, int d) { string[] weekstr = new string[] { "日", "一", "二", "三", "四", "五", "六" }; if (m < 3) { m += 12; y--; } if (y % 400 == 0 || (y % 100 != 0 && y % 4 == 0)) { d--; } else { d++; } return "星期" + weekstr[(d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7]; } public static int GetDaysOfYear(int iYear) { return DateTimeHelper.IsRuYear(iYear) ? 366 : 365; } public static int GetDaysOfYear(DateTime dt) { return DateTimeHelper.IsRuYear(dt.Year) ? 366 : 365; } public static int GetDaysOfMonth(int iYear, int Month) { int days = 0; switch (Month) { case 1: days = 31; break; case 2: days = (DateTimeHelper.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: 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 int GetDaysOfMonth(DateTime dt) { int days = 0; int year = dt.Year; switch (dt.Month) { case 1: days = 31; break; case 2: days = (DateTimeHelper.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(DateTime dt) { string week = string.Empty; switch (dt.DayOfWeek) { case DayOfWeek.Sunday: week = "星期日"; break; case DayOfWeek.Monday: week = "星期一"; break; case DayOfWeek.Tuesday: week = "星期二"; break; case DayOfWeek.Wednesday: week = "星期三"; break; case DayOfWeek.Thursday: week = "星期四"; break; case DayOfWeek.Friday: week = "星期五"; break; case DayOfWeek.Saturday: week = "星期六"; break; } return week; } public static int GetWeekNumberOfDay(DateTime dt) { int week = 0; switch (dt.DayOfWeek) { case DayOfWeek.Sunday: week = 7; break; case DayOfWeek.Monday: week = 1; break; case DayOfWeek.Tuesday: week = 2; break; case DayOfWeek.Wednesday: week = 3; break; case DayOfWeek.Thursday: week = 4; break; case DayOfWeek.Friday: week = 5; break; case DayOfWeek.Saturday: week = 6; break; } return week; } public static int GetWeekAmount(int year) { DateTime end = new DateTime(year, 12, 31); GregorianCalendar gc = new GregorianCalendar(); return gc.GetWeekOfYear(end, CalendarWeekRule.FirstDay, DayOfWeek.Monday); } public static int GetWeekOfYear(DateTime dt) { GregorianCalendar gc = new GregorianCalendar(); return gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday); } public static void WeekRange(int year, int weekOrder, ref DateTime firstDate, ref DateTime lastDate) { DateTime firstDay = new DateTime(year, 1, 1); int firstOfWeek = Convert.ToInt32(firstDay.DayOfWeek); int dayDiff = -1 * firstOfWeek + 1; int dayAdd = 7 - firstOfWeek; firstDate = firstDay.AddDays((double)dayDiff).Date; lastDate = firstDay.AddDays((double)dayAdd).Date; if (weekOrder != 1) { int addDays = (weekOrder - 1) * 7; firstDate = firstDate.AddDays((double)addDays); lastDate = lastDate.AddDays((double)addDays); } } public static int DiffDays(DateTime dtfrm, DateTime dtto) { return (dtto.Date - dtfrm.Date).Days; } private static bool IsRuYear(int iYear) { return iYear % 400 == 0 || (iYear % 4 == 0 && iYear % 100 != 0); } public static DateTime ToDate(string strInput) { DateTime oDateTime; try { oDateTime = DateTime.Parse(strInput); } catch (Exception) { oDateTime = DateTime.Today; } return oDateTime; } public static string ToString(DateTime oDateTime, string strFormat) { string strDate; try { string text = strFormat.ToUpper(); if (text != null) { if (text == "SHORTDATE") { strDate = oDateTime.ToShortDateString(); goto IL_47; } if (text == "LONGDATE") { strDate = oDateTime.ToLongDateString(); goto IL_47; } } strDate = oDateTime.ToString(strFormat); IL_47: ; } catch (Exception) { strDate = oDateTime.ToShortDateString(); } return strDate; } } }