.Net C# 時間戳時間轉換


閑話不多說,直接上代碼

    /// <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;
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM