using System;
namespace ET
{
///
/// 时间工具类
///
public static class DateTimeUtil
{
///
/// 时间戳计时开始时间
///
private static DateTime timeStampStartTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
///
/// DateTime转换为10位时间戳(单位:秒)
///
/// DateTime
/// 10位时间戳(单位:秒)
public static long DateTimeToTimeStamp(DateTime dateTime)
{
return (long)(dateTime.ToUniversalTime() - timeStampStartTime).TotalSeconds;
}
///
/// DateTime转换为13位时间戳(单位:毫秒)
///
/// DateTime
/// 13位时间戳(单位:毫秒)
public static long DateTimeToLongTimeStamp(DateTime dateTime)
{
return (long)(dateTime.ToUniversalTime() - timeStampStartTime).TotalMilliseconds;
}
///
/// 10位时间戳(单位:秒)转换为DateTime
///
/// 10位时间戳(单位:秒)
/// DateTime
public static DateTime TimeStampToDateTime(long timeStamp)
{
return timeStampStartTime.AddSeconds(timeStamp).ToLocalTime();
}
///
/// 13位时间戳(单位:毫秒)转换为DateTime
///
/// 13位时间戳(单位:毫秒)
/// DateTime
public static DateTime LongTimeStampToDateTime(long longTimeStamp)
{
return timeStampStartTime.AddMilliseconds(longTimeStamp).ToLocalTime();
}
public const string FormatA = "yyyyMMdd";
public const string FormatB = "yyyyMMddHH";
public const string FormatC = "yyyyMMddHHmm";
public const string FormatD = "yyyyMMddHHmmss";
public const string FormatE = "yyyyMMddHHmmssFFF";
public const string FormatF = "HHmmss";
///
/// 当前时间 yyyyMMddHHmmssFFF
///
///
public static long GetNowTime(string format)
{
if (format == FormatE)
{
return UpTimeStamp(long.Parse(TimeHelper.DateTimeNow().ToString(format)));
}
else
{
return long.Parse(TimeHelper.DateTimeNow().ToString(format));
}
}
public static long UpTimeStamp(long lg)
{
if (lg == 0) return lg;
string logStr = lg.ToString();
if (logStr.Length < 17)
{
return UpTimeStamp(lg * 10);
}
else
{
return lg;
}
}
///
/// 当前时间 yyyyMMddHHmmssFFF
///
///
public static long GetTime(DateTime dt, string format)
{
if (format == FormatE)
{
long lgTime = UpTimeStamp(long.Parse(dt.ToString(format)));
return lgTime;
}
else
{
return long.Parse(dt.ToString(format));
}
}
///
/// 获取指定中国毫秒级时间戳所在日期的凌晨5点的时间戳
///
/// 13位时间戳
///
public static long GetChinaToday5AMTimestamp(long timestamp)
{
DateTime dateTime = DateTimeUtil.LongTimeStampToDateTime(timestamp);
// 转换为 DateTimeOffset
DateTimeOffset dateTimeOffset = new DateTimeOffset(dateTime);
// 获取当天日期的凌晨00点
DateTimeOffset today = new DateTimeOffset(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, 0,
0, 0, TimeSpan.FromHours(8));
// 设置凌晨5点的时间
DateTimeOffset today5AM = today.AddHours(5);
// 返回凌晨5点的时间戳(毫秒级)
return today5AM.ToUnixTimeMilliseconds();
}
}
}