閑話不多說,直接上代碼
/// <summary> /// 時間拓展 /// </summary> public static class DateTimeExtension { /// <summary> /// 獲取時間戳 /// </summary> /// <param name="dt">時間</param> /// <param name="millisecond">是否毫秒級,true毫秒級(默認值)</param> /// <returns></returns> public static long ToTimestamp(this DateTime dt, bool millisecond = true) { /* * ticks的單位是100納秒,1 Tick=100納秒,所以需要除以10000000(秒),10000(毫秒) * s(秒),ms(毫秒),μs(微秒),ns(納秒),1s=1000ms,1 ms=1000μs,1μs=1000ns */ int divisor = millisecond ? 10000 : 10000000; long dt_ticks = dt.ToUniversalTime().Ticks; return (dt_ticks - Const.TiksUtc1970) / divisor; } /// <summary> /// 時間戳轉換成時間,返回NULL則說明轉換失敗(如時間戳無效) /// </summary> /// <param name="timestamp">時間戳</param> /// <param name="millisecond">是否毫秒級,true毫秒級(默認值)</param> /// <param name="localTime">是否輸出本地時間,true本地時間(默認值)</param> /// <returns></returns> public static DateTime? ToDateTime(this long timestamp, bool millisecond = true, bool localTime = true) { try { int ms = millisecond ? 10000 : 10000000; var dt = new DateTime(Const.TiksUtc1970 + timestamp * ms, DateTimeKind.Utc); if (localTime) dt.ToLocalTime(); return dt; } catch { return null; } } /// <summary> /// 時間戳轉換成時間 /// </summary> /// <param name="timestamp">時間戳</param> /// <param name="millisecond">是否毫秒級,true毫秒級(默認值)</param> /// <param name="localTime">是否輸出本地時間,true本地時間(默認值)</param> /// <returns></returns> public static DateTime? ToDateTime(this string timestamp, bool millisecond = true, bool localTime = true) { if (long.TryParse(timestamp, out long ts)) { return ts.ToDateTime(millisecond, localTime); } return null; } }
/// <summary> /// 常量定義 /// </summary> public class Const { /// <summary> /// 日期時間格式化 /// </summary> public const string DateTimeFormatString = "yyyy-MM-dd HH:mm:ss"; /// <summary> /// 日期時間格式化 /// </summary> public const string DateHmFormatString = "yyyy-MM-dd HH:mm"; /// <summary> /// 日期格式化 /// </summary> public const string DateFormatString = "yyyy-MM-dd"; /// <summary> /// utc 1601-1-1 到 utc 1970-1-1 的 Ticks /// </summary> public const long TiksUtc1970 = 621355968000000000; }