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