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;
}
}
}