格式化日期:2026-06-06
当月第一天:2026-06-01
当月最后一天:2026-06-30
获取日期的开始时间(第一秒):2026-06-06 00:00:00
获取日期的结束时间(最后一秒):2026-06-06 23:59:59
时间差:6年6个月6天6小时6分钟6秒
时间对象与时间戳相互转换
1、DateTimeExtensions.cs
using System.Text;
using System.Text.RegularExpressions;
namespace Trial.Common.Extensions
{
public static class DateTimeExtensions
{
/// <summary>
/// 格式化日期时间
/// </summary>
/// <param name="dateTime1">日期时间</param>
/// <param name="dateMode">显示模式</param>
/// <returns>0-9种模式的日期</returns>
public static string FormatDate(DateTime dateTime1, string dateMode)
{
switch (dateMode)
{
case "0":
return dateTime1.ToString("yyyy-MM-dd");
case "1":
return dateTime1.ToString("yyyy-MM-dd HH:mm:ss");
case "2":
return dateTime1.ToString("yyyy/MM/dd");
case "3":
return dateTime1.ToString("yyyy年MM月dd日");
case "4":
return dateTime1.ToString("MM-dd");
case "5":
return dateTime1.ToString("MM/dd");
case "6":
return dateTime1.ToString("MM月dd日");
case "7":
return dateTime1.ToString("yyyy-MM");
case "8":
return dateTime1.ToString("yyyy/MM");
case "9":
return dateTime1.ToString("yyyy年MM月");
default:
return dateTime1.ToString();
}
}
/// <summary>
/// 时间差【推荐】
/// </summary>
/// <param name="startTime">开始时间</param>
/// <param name="endTime">结束时间</param>
/// <param name="fullTime">是否显示全部</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static string DateDiff(DateTime startTime, DateTime endTime, bool fullTime = true)
{
if (startTime < endTime)
{
var t = new
{
bm = startTime.Month,
em = endTime.Month,
bd = startTime.Day,
ed = endTime.Day
};
int diffMonth = (endTime.Year - startTime.Year) * 12 + (t.em - t.bm),//相差月
diffYear = diffMonth / 12;//相差年
int[] d = new int[3] { 0, 0, 0 };
if (diffYear > 0)
{
if (t.em == t.bm && t.ed < t.bd)
{
d[0] = diffYear - 1;
}
else d[0] = diffYear;
}
if (t.ed >= t.bd)
{
d[1] = diffMonth % 12;
d[2] = t.ed - t.bd;
}
else//结束日 小于 开始日
{
int dm = diffMonth - 1;
d[1] = dm % 12;
TimeSpan ts = endTime - startTime.AddMonths(dm);
d[2] = ts.Days;
}
StringBuilder sb = new StringBuilder();
if (d.Sum() > 0 || fullTime)
{
#region 如果是0不显示
//if (d[0] > 0) sb.Append($"{d[0]}年");
//if (d[1] > 0) sb.Append($"{d[1]}个月");
//if (d[2] > 0) sb.Append($"{d[2]}天");
//int[] time = new int[2] { 0, 0 };
//TimeSpan sj = e - b;
//time[0] = sj.Hours;
//time[1] = sj.Minutes % 60;
//if (time[0] > 0) sb.Append($"{time[0]}小时");
//if (time[1] > 0) sb.Append($"{time[1]}分钟");
//if (time.Sum() <= 0) sb.Append($"{sj.Seconds}秒");
#endregion
#region 如果是0也显示
sb.Append($"{d[0]}年");
sb.Append($"{d[1]}个月");
sb.Append($"{d[2]}天");
int[] time = new int[2] { 0, 0 };
TimeSpan sj = endTime - startTime;
time[0] = sj.Hours;
time[1] = sj.Minutes % 60;
sb.Append($"{time[0]}小时");
sb.Append($"{time[1]}分钟");
sb.Append($"{sj.Seconds}秒");
#endregion
}
else
{
int[] time = new int[2] { 0, 0 };
TimeSpan sj = endTime - startTime;
time[0] = sj.Hours;
time[1] = sj.Minutes % 60;
if (time[0] > 0) sb.Append($"{time[0]}小时");
if (time[1] > 0) sb.Append($"{time[1]}分钟");
if (time.Sum() <= 0) sb.Append($"{sj.Seconds}秒");
}
return sb.ToString();
}
else throw new Exception("开始日期必须小于结束日期");
}
/// <summary>
/// 获得两个日期的间隔
/// </summary>
/// <param name="DateTime1">日期一。</param>
/// <param name="DateTime2">日期二。</param>
/// <returns>日期间隔TimeSpan。</returns>
public static TimeSpan DateDiff2(DateTime DateTime1, DateTime DateTime2)
{
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
return ts;
}
/// <summary>
/// 当月第一天
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetFirstDayOfMonth(this DateTime date)
{
DateTime dtFrom = date;
dtFrom = dtFrom.AddDays(-(dtFrom.Day - 1));
return dtFrom;
}
/// <summary>
/// 当月最后一天
/// full date
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static DateTime GetLastDayOfMonth(this DateTime date)
{
DateTime dtTo = date;
dtTo = dtTo.AddMonths(1);
dtTo = dtTo.AddDays(-(dtTo.Day));
return dtTo;
}
/// <summary>
/// 获取日期的开始时间(第一秒)
/// </summary>
/// <returns></returns>
public static DateTime GetStartOfDay(this DateTime date, int dateMode)
{
DateTime startDate = Convert.ToDateTime("2024-6-6 06:06:06");
DateTime startTime = DateTime.Now;
if (dateMode == 1)
{
DateTime dt = DateTime.Today;
string start = dt.ToString();
}
else if (dateMode == 2)
{
DateTime start1 = startDate.Date;
string startTimeString = start1.ToString();
/// 动态参数
startTime = date.Date;
string startString = startTime.ToString();
}
else if (dateMode == 3)
{
DateTime start1 = startDate.Date.AddTicks(1);
/// 动态参数
startTime = date.Date.AddTicks(1);
}
else if (dateMode == 4)
{
DateTime dateTime = Convert.ToDateTime(startDate.ToString("yyyy-MM-dd 00:00:00"));
/// 动态参数
startTime = Convert.ToDateTime(date.ToString("yyyy-MM-dd 00:00:00"));
}
else if (dateMode == 5)
{
DateTime start1 = Convert.ToDateTime(startDate.ToString("D").ToString());
/// 动态参数
startTime = Convert.ToDateTime(date.ToString("D").ToString());
}
else if (dateMode == 6)
{
startTime = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
}
return startTime;
}
/// <summary>
/// 获取日期的结束时间(最后一秒)
/// </summary>
/// <param name="date"></param>
/// <param name="dateMode"></param>
/// <returns></returns>
public static DateTime GetEndOfDay(this DateTime date, int dateMode)
{
DateTime startDate = Convert.ToDateTime("2024-6-6 06:06:06");
DateTime endTime = DateTime.Now;
if (dateMode == 1)
{
var endDateTime = startDate.Date.AddDays(1).AddMilliseconds(-1);
/// 动态参数
endTime = date.Date.AddDays(1).AddMilliseconds(-1);
}
else if (dateMode == 2)
{
var startDateTime = Convert.ToDateTime(startDate.ToString("yyyy-MM-dd 00:00:00"));
var endDateTime = startDateTime.AddDays(1).AddMilliseconds(-1);
/// 动态参数
var startTime = Convert.ToDateTime(date.ToString("yyyy-MM-dd 00:00:00"));
endTime = startTime.AddDays(1).AddMilliseconds(-1);
}
else if (dateMode == 3)
{
DateTime endDateTime = Convert.ToDateTime(startDate.AddDays(1).ToString("D").ToString()).AddSeconds(-1);
/// 动态参数
endTime = Convert.ToDateTime(date.AddDays(1).ToString("D").ToString()).AddSeconds(-1);
}
else if (dateMode == 4)
{
endTime = new DateTime(date.Year, date.Month, date.Day, 23, 59, 59);
}
return endTime;
}
#region 时间对象与时间戳相互转换
/// <summary>
/// 将 DateTime 转换为 Unix 时间戳
/// </summary>
/// <param name="dateTime">需要转换的时间</param>
/// <returns>Unix 时间戳</returns>
public static long DateTimeToUnixTime(this DateTime dateTime)
{
return (long)(dateTime - TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0), TimeZoneInfo.Local)).TotalSeconds;
}
/// <summary>
/// 将 Unix 时间戳转换为 DateTime
/// </summary>
/// <param name="timestamp">Unix 时间戳</param>
/// <returns>需要转换的时间</returns>
public static DateTime UnixTimeToDateTime(this long timestamp)
{
if (timestamp < 0)
throw new ArgumentOutOfRangeException("timestamp is out of range");
return TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0), TimeZoneInfo.Local).AddSeconds(timestamp);
}
#endregion
#region 判断是否为日期,时间,日期+时间
/// <summary>
/// 判断是否为日期
/// </summary>
/// <param name="obj">Object</param>
/// <returns>bool</returns>
public static bool IsDate(Object obj)
{
var result = false;
if (obj != null)
{
result = Regex.IsMatch(obj.ToString(), @"^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-9]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$");
}
return result;
}
/// <summary>
/// 判断是否为时间
/// </summary>
/// <param name="obj">Object对象</param>
/// <returns>bool</returns>
public static bool IsTime(Object obj)
{
var result = false;
if (obj != null)
{
result = Regex.IsMatch(obj.ToString(), @"^((20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d)$");
}
return result;
}
/// <summary>
/// 判断是否为日期+时间
/// </summary>
/// <param name="obj">Object对象</param>
/// <returns>bool</returns>
public static bool IsDateTime(Object obj)
{
var result = false;
if (obj != null)
{
result = Regex.IsMatch(obj.ToString(), @"^(((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d)$ ");
}
return result;
}
#endregion
}
}
*、DateTimeUtil.cs
namespace Trial.Common
{
/// <summary>
/// Admin.NET 开源项目
/// </summary>
public class DateTimeUtil
{
/// <summary>
/// 获取开始时间
/// </summary>
/// <param name="dateTime"></param>
/// <param name="days"></param>
/// <returns></returns>
public static DateTime GetBeginTime(DateTime? dateTime, int days = 0)
{
if (dateTime == DateTime.MinValue || dateTime == null)
return DateTime.Now.AddDays(days);
return dateTime ?? DateTime.Now;
}
/// <summary>
/// 时间戳转本地时间-时间戳精确到秒
/// </summary>
public static DateTime ToLocalTimeDateBySeconds(long unix)
{
return DateTimeOffset.FromUnixTimeSeconds(unix).ToLocalTime().DateTime;
}
/// <summary>
/// 时间转时间戳Unix-时间戳精确到秒
/// </summary>
public static long ToUnixTimestampBySeconds(DateTime dt)
{
return new DateTimeOffset(dt).ToUnixTimeSeconds();
}
/// <summary>
/// 时间戳转本地时间-时间戳精确到毫秒
/// </summary>
public static DateTime ToLocalTimeDateByMilliseconds(long unix)
{
return DateTimeOffset.FromUnixTimeMilliseconds(unix).ToLocalTime().DateTime;
}
/// <summary>
/// 时间转时间戳Unix-时间戳精确到毫秒
/// </summary>
public static long ToUnixTimestampByMilliseconds(DateTime dt)
{
return new DateTimeOffset(dt).ToUnixTimeMilliseconds();
}
/// <summary>
/// 毫秒转天时分秒
/// </summary>
/// <param name="ms"></param>
/// <returns></returns>
public static string FormatTime(long ms)
{
int ss = 1000;
int mi = ss * 60;
int hh = mi * 60;
int dd = hh * 24;
long day = ms / dd;
long hour = (ms - day * dd) / hh;
long minute = (ms - day * dd - hour * hh) / mi;
long second = (ms - day * dd - hour * hh - minute * mi) / ss;
long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss;
string sDay = day < 10 ? "0" + day : "" + day; //天
string sHour = hour < 10 ? "0" + hour : "" + hour;//小时
string sMinute = minute < 10 ? "0" + minute : "" + minute;//分钟
string sSecond = second < 10 ? "0" + second : "" + second;//秒
string sMilliSecond = milliSecond < 10 ? "0" + milliSecond : "" + milliSecond;//毫秒
sMilliSecond = milliSecond < 100 ? "0" + sMilliSecond : "" + sMilliSecond;
return string.Format("{0} 天 {1} 小时 {2} 分 {3} 秒", sDay, sHour, sMinute, sSecond);
}
/// <summary>
/// 获取unix时间戳
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static long GetUnixTimeStamp(DateTime dt)
{
return ((DateTimeOffset)dt).ToUnixTimeMilliseconds();
}
/// <summary>
/// 获取日期天的最小时间
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static DateTime GetDayMinDate(DateTime dt)
{
return new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0);
}
/// <summary>
/// 获取日期天的最大时间
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static DateTime GetDayMaxDate(DateTime dt)
{
return new DateTime(dt.Year, dt.Month, dt.Day, 23, 59, 59);
}
/// <summary>
/// 获取日期天的最大时间
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string FormatDateTime(DateTime? dt)
{
if (dt == null) return string.Empty;
if (dt.Value.Year == DateTime.Now.Year)
return dt.Value.ToString("MM-dd HH:mm");
else
return dt.Value.ToString("yyyy-MM-dd HH:mm");
}
/// <summary>
/// 获取今天日期范围00:00:00 - 23:59:59
/// </summary>
/// <returns></returns>
public static List<DateTime> GetTodayTimeList(DateTime time)
{
return new List<DateTime>
{
Convert.ToDateTime(time.ToString("D").ToString()),
Convert.ToDateTime(time.AddDays(1).ToString("D").ToString()).AddSeconds(-1)
};
}
/// <summary>
/// 获取星期几
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string GetWeekByDate(DateTime dt)
{
var day = new[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
return day[Convert.ToInt32(dt.DayOfWeek.ToString("d"))];
}
/// <summary>
/// 获取这个月的第几周
/// </summary>
/// <param name="daytime"></param>
/// <returns></returns>
public static int GetWeekNumInMonth(DateTime daytime)
{
int dayInMonth = daytime.Day;
// 本月第一天
DateTime firstDay = daytime.AddDays(1 - daytime.Day);
// 本月第一天是周几
int weekday = firstDay.DayOfWeek == 0 ? 7 : (int)firstDay.DayOfWeek;
// 本月第一周有几天
int firstWeekEndDay = 7 - (weekday - 1);
// 当前日期和第一周之差
int diffday = dayInMonth - firstWeekEndDay;
diffday = diffday > 0 ? diffday : 1;
// 当前是第几周,若整除7就减一天
return (diffday % 7 == 0 ? diffday / 7 - 1 : diffday / 7) + 1 + (dayInMonth > firstWeekEndDay ? 1 : 0);
}
}
}
*
/// <summary>
/// 计算两个时间年份月份差
/// </summary>
/// <returns></returns>
public static int GetUsedMonth1()
{
try
{
DateTime currentDate = DateTime.Now;
DateTime dynamicTime = Convert.ToDateTime("2017-9-5");
int year = currentDate.Year - dynamicTime.Year; //相差的年份
int month = (currentDate.Year - dynamicTime.Year) * 12 + (currentDate.Month - dynamicTime.Month); //相差的月份
int month1 = currentDate.Year * 12 + currentDate.Month - dynamicTime.Year * 12 - dynamicTime.Month; //相差的月份
TimeSpan used = DateTime.Now - dynamicTime;
double totalDays = used.TotalDays; //相差总天数
return Convert.ToInt32(month);
}
catch (Exception)
{
return 0;
}
}
*、DateTimeController.cs
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using MongoDB.Driver.Linq;
using Trial.Contract;
namespace Trial.WebAPI.Controllers
{
[ApiController]
[Route("api/DateTime/[action]")]
public class DateTimeController : ControllerBase
{
public DateTimeController() { }
/// <summary>
/// 获取日期的开始时间(第一秒)
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
[HttpPost]
public IActionResult GetStartOfDay([FromBody] DateTime data)
{
DateTime d1 = Common.Extensions.DateTimeExtensions.GetStartOfDay(data, 1);
DateTime d2 = Common.Extensions.DateTimeExtensions.GetStartOfDay(data, 2);
DateTime d3 = Common.Extensions.DateTimeExtensions.GetStartOfDay(data, 3);
DateTime d4 = Common.Extensions.DateTimeExtensions.GetStartOfDay(data, 4);
DateTime d5 = Common.Extensions.DateTimeExtensions.GetStartOfDay(data, 5);
return Ok(new
{
d1 = d1,
d2 = d2,
d3 = d3,
d4 = d4,
d5 = d5,
});
}
/// <summary>
/// 获取日期的结束时间(最后一秒)
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
[HttpPost]
public IActionResult GetEndOfDay([FromBody] DateTime data)
{
DateTime d1 = Common.Extensions.DateTimeExtensions.GetEndOfDay(data, 1);
DateTime d2 = Common.Extensions.DateTimeExtensions.GetEndOfDay(data, 2);
DateTime d3 = Common.Extensions.DateTimeExtensions.GetEndOfDay(data, 3);
return Ok(new
{
d1 = d1,
d2 = d2,
d3 = d3,
});
}
[HttpPost]
public IActionResult GetDateDiff([FromBody] DateDiffInput input)
{
var d1 = Common.Extensions.DateTimeExtensions.DateDiff(input.StartTime, input.EndTime, input.FullTime);
return Ok(new
{
d1 = d1,
});
}
}
}
*
*
*