using System; namespace Hncore.Infrastructure.Extension { public static class DateTimeExtension { public static string Format(this DateTime time, string format = "yyyy-MM-dd") { return time.ToString(format); } private static DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); public static long CurrentTimeMillis() { return (long) ((DateTime.UtcNow - Jan1st1970).TotalMilliseconds); } public static long CurrentTimeMillis(DateTime time) { return (long) ((time.ToUniversalTime() - Jan1st1970).TotalMilliseconds); } public static string Format(this DateTime? dateTime, string format = "yyyy-MM-dd") { return Convert.ToDateTime(dateTime).ToString(format); } public static DateTime ToDateTime(this DateTime? dateTime, DateTime defaultTime) { if (dateTime != null) { return Convert.ToDateTime(dateTime); } return defaultTime; } public static bool Between(this DateTime time, DateTime beginTime, DateTime endTime) { return time >= beginTime && time <= endTime; } /// /// 取得某月的第一天 /// /// 要取得月份第一天的时间 /// public static DateTime FirstDayOfMonth(this DateTime datetime) { return datetime.AddDays(1 - datetime.Day); } /**/ /// /// 取得某月的最后一天 /// /// 要取得月份最后一天的时间 /// public static DateTime LastDayOfMonth(this DateTime datetime) { return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1); } /**/ /// /// 取得上个月第一天 /// /// 要取得上个月第一天的当前时间 /// public static DateTime FirstDayOfPreviousMonth(this DateTime datetime) { return datetime.AddDays(1 - datetime.Day).AddMonths(-1); } /**/ /// /// 取得上个月的最后一天 /// /// 要取得上个月最后一天的当前时间 /// public static DateTime LastDayOfPrdviousMonth(this DateTime datetime) { return datetime.AddDays(1 - datetime.Day).AddDays(-1); } /// /// 获取时间的Unix时间戳 /// /// 时间对象 /// Unix时间戳 /// public static long GetUnixTimeStamp(this DateTime tm) { long result = (tm.ToUniversalTime().Ticks - 621355968000000000) / 10000000; return result; } /// /// 从Uninx转换时间 /// /// 时间对象 /// 时间戳 /// 新时间对象 /// public static DateTime LoadFromUnixTimeStamp(this DateTime tm,double timeStamp) { DateTime startTime=TimeZoneInfo.ConvertTime(new System.DateTime(1970, 1, 1),TimeZoneInfo.Local); DateTime result=startTime.AddSeconds(timeStamp); return result; } public static DateTime LoadFromUnixTimeStamp(this long timeStamp) { DateTime startTime = TimeZoneInfo.ConvertTime(new System.DateTime(1970, 1, 1), TimeZoneInfo.Local); DateTime result = startTime.AddSeconds(timeStamp); return result; } /// /// 时间戳转换成时间 /// /// 时间戳 /// 是否毫秒级,true毫秒级(默认值) /// 是否输出本地时间,true本地时间(默认值) /// public static DateTime? LoadFromUnixTimeStamp(this string timestamp) { if (long.TryParse(timestamp, out long ts)) { return ts.LoadFromUnixTimeStamp(); } return null; } /// /// 1970 到现在的秒数 /// /// /// public static int TimestampFrom19700101(this DateTime time) { return (int)(time - new DateTime(1970, 01, 01)).TotalSeconds; } #region 获取日期、明天 public static DateTime Date(this DateTime? time) { return Convert.ToDateTime(time).Date; } public static DateTime NextDate(this DateTime? time) { return Convert.ToDateTime(time).Date.AddDays(1); } public static DateTime Date(this DateTime time) { return time.Date; } public static DateTime NextDate(this DateTime time) { return time.Date.AddDays(1); } #endregion public static DateTime Begin(this DateTime time) { return new DateTime(time.Year, time.Month, time.Day); } public static DateTime End(this DateTime time) { return new DateTime(time.Year, time.Month, time.Day,23,59,59); } } }