欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#时间戳的简单实现

程序员文章站 2022-07-11 10:33:03
Introduction: 在项目开发中,我们都经常会用到时间戳来进行时间的存储和传递,最常用的Unix时间戳(TimeStamp)是指格林尼治时间1970年1月1日0时(北京时间1970年1月1日8时)起至现在的总秒数(10位)或总毫秒数(13位); Body: 而在C#中.Net框架没有提供现成 ......

introduction:

  在项目开发中,我们都经常会用到时间戳来进行时间的存储和传递,最常用的unix时间戳(timestamp)是指格林尼治时间1970年1月1日0时(北京时间1970年1月1日8时)起至现在的总秒数(10位)或总毫秒数(13位);

body:

  而在c#中.net框架没有提供现成的获取时间戳的方式,这里分享一个自己实现的时间戳转换工具:

    /// <summary>
    /// 时间工具类
    /// </summary>
    public static class datetimeutil
    {
        /// <summary>
        /// 时间戳计时开始时间
        /// </summary>
        private static datetime timestampstarttime = new datetime(1970, 1, 1, 0, 0, 0, datetimekind.utc);

        /// <summary>
        /// datetime转换为10位时间戳(单位:秒)
        /// </summary>
        /// <param name="datetime"> datetime</param>
        /// <returns>10位时间戳(单位:秒)</returns>
        public static long datetimetotimestamp(datetime datetime)
        {
            return (long)(datetime.touniversaltime() - timestampstarttime).totalseconds;
        }

        /// <summary>
        /// datetime转换为13位时间戳(单位:毫秒)
        /// </summary>
        /// <param name="datetime"> datetime</param>
        /// <returns>13位时间戳(单位:毫秒)</returns>
        public static long datetimetolongtimestamp(datetime datetime)
        {
            return (long)(datetime.touniversaltime() - timestampstarttime).totalmilliseconds;
        }

        /// <summary>
        /// 10位时间戳(单位:秒)转换为datetime
        /// </summary>
        /// <param name="timestamp">10位时间戳(单位:秒)</param>
        /// <returns>datetime</returns>
        public static datetime timestamptodatetime(long timestamp)
        {
            return timestampstarttime.addseconds(timestamp).tolocaltime();
        }

        /// <summary>
        /// 13位时间戳(单位:毫秒)转换为datetime
        /// </summary>
        /// <param name="longtimestamp">13位时间戳(单位:毫秒)</param>
        /// <returns>datetime</returns>
        public static datetime longtimestamptodatetime(long longtimestamp)
        {
            return timestampstarttime.addmilliseconds(longtimestamp).tolocaltime();
        }
    }

one more thing:

  在c#中,datetime和字符串类型类似,都是一个设计良好的不可变类型,但与字符串类型不同的是,datetime是值类型,不会造成单独的堆内存消耗和垃圾回收开销,因此大大部分情况下都可以放心使用;

conclusion:

  datetime在使用时还有很多小技巧,博主后面会在新博文中分享出来和大家一起探讨。有关闰秒的话题可以自行search,这里不做讨论。

 


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的认可是我写作的最大动力!

作者:minotauros
出处:

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。