using System;
namespace QYZH.InteractiveMagazine.Common.Extensions
{
///
/// 日期时间扩展方法
///
public static class DateTimeExtension
{
///
/// 时间戳起始日期
///
public static readonly DateTime TimestampStart = new(1970, 1, 1, 0, 0, 0, 0);
///
/// 转换为Unix时间戳(秒)
///
/// 日期时间
/// Unix时间戳
public static long ToTimestamp(this DateTime dateTime)
{
return new DateTimeOffset(dateTime.ToUniversalTime()).ToUnixTimeSeconds();
}
///
/// 从Unix时间戳(秒)转换为DateTime
///
/// Unix时间戳
/// 日期时间
public static DateTime FromTimestamp(long timestamp)
{
return DateTimeOffset.FromUnixTimeSeconds(timestamp).LocalDateTime;
}
///
/// 转换为指定格式的日期时间字符串
///
/// 日期时间
/// 格式字符串,默认为"yyyy-MM-dd HH:mm:ss"
/// 格式化的日期时间字符串
public static string ToDateTimeString(this DateTime dateTime, string format = "yyyy-MM-dd HH:mm:ss")
{
return dateTime.ToString(format);
}
///
/// 从生日计算年龄
///
/// 生日日期
/// 年龄
public static int GetAge(this DateTime birthday)
{
int age = DateTime.Now.Year - birthday.Year;
if (DateTime.Now.DayOfYear < birthday.DayOfYear)
{
age--;
}
return age;
}
///
/// 判断是否是今天
///
/// 日期时间
/// 是否是今天
public static bool IsToday(this DateTime dateTime)
{
return dateTime.Date == DateTime.Today;
}
///
/// 获取当天开始时间(00:00:00)
///
/// 日期时间
/// 当天开始时间
public static DateTime ToStartOfDay(this DateTime dateTime)
{
return dateTime.Date;
}
///
/// 获取当天结束时间(23:59:59.999)
///
/// 日期时间
/// 当天结束时间
public static DateTime ToEndOfDay(this DateTime dateTime)
{
return dateTime.Date.AddDays(1).AddTicks(-1);
}
public static long ToTimestamp(this DateTime dateTime, bool milliseconds = false)
{
var timestamp = dateTime.ToUniversalTime() - TimestampStart;
return (long)(milliseconds ? timestamp.TotalMilliseconds : timestamp.TotalSeconds);
}
public static long ToMillisecondsTimestamp(this DateTime dateTime)
{
return ToTimestamp(dateTime, true);
}
}
}