c#时间与时间戳互转13位

Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广告采用。
 
【注意】目前相当一部分操作系统使用32位二进制数字表示时间。此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 11111111 11111111 11111111)。其后一秒,二进制数字会变为10000000 00000000 00000000 00000000,发生溢出错误,造成系统将时间误解为1901年12月13日20时45分52秒。这很可能会引起软件故障,甚至是系统瘫痪。使用64位二进制数字表示时间的系统(最多可以使用到格林威治时间292,277,026,596年12月04日15时30分08秒)则基本不会遇到这类溢出问题。
 
目前经常出现的时间有三个:
本地时间(locale time)
格林威治时间(Greenwich Mean Time GMT)
时间协调时间 (Universal Time Coordinated UTC)
 
时间标准:
(1)世界时 
世界时是最早的时间标准。在1884年,国际上将1s确定为全年内每日平均长度的1/8.64×104。以此标准形成的时间系统,称为世界时(UT1)。 1972年国际上开始使用国际原子时标,从那以后,经过格林威治老天文台本初子午线的时间便被称为世界时(UT2),或称格林威治时间(GMT),UT2是对地球转速周期性差异进行校正后的世界时。 
(2)原子时 
1967年,人们利用铯原子振荡周期极为规律的特性,研制出了高精度的原子时钟,将铯原子能级跃迁辐射9192631770周所经历的时间定为1s。现在用的时间就是1971年10月定义的国际原子时,是通过世界上大约200多台原子 钟进行对比后,再由国际度量衡局时间所进行数据处理,得出的统一的原子时,简称TAI。 
(3)世界协调时 
世界协调时是以地球自转为基础的时间标准。由于地球自转速度并不均匀,并非每天都是精确的86400原子s,因而导致了自转时间与世界时之间存在18个月有1s的误差。为纠正这种误差,国际地球自转研究所根据地球自转的实际情况对格林威治时间进行增减闰s的调整,与国际度量衡局时间所联合向全世界发布标准时间,这就是所谓的世界协调时(UTC:CoordinatdeUniversalTime)。UTC的表示方式为:年(y)、月(m)、日(d)、时(h)、分(min)、秒(s),均用数字表示。
 
GPS 系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的时间,地方时为本地时间,如北京为早上八点(东八区),UTC时间就为零点,时间比北京时晚八小时,以此计算即可
  通过上面的了解,我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的。
 
  
 
  
/// <summary>
        /// 获取时间戳
        /// </summary>
        /// <returns></returns>
        public static string GetTimeStamp(System.DateTime time)
        {
            long ts = ConvertDateTimeToInt(time);
            return ts.ToString();
        }
        /// <summary>  
        /// 将c# DateTime时间格式转换为Unix时间戳格式  
        /// </summary>  
        /// <param name="time">时间</param>  
        /// <returns>long</returns>  
        public static long ConvertDateTimeToInt(System.DateTime time)
        {
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
            long t = (time.Ticks - startTime.Ticks) / 10000;   //除10000调整为13位      
            return t;
        }
        /// <summary>        
        /// 时间戳转为C#格式时间        
        /// </summary>        
        /// <param name=”timeStamp”></param>        
        /// <returns></returns>        
        private DateTime ConvertStringToDateTime(string timeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(timeStamp + "0000");
            TimeSpan toNow = new TimeSpan(lTime);
            return dtStart.Add(toNow);
        } 
复制代码

 

复制代码
 /// <summary>
    /// 时间戳
    /// </summary>
    public class TimeHelp
    {
        /// <summary>
        /// 获取时间戳
        /// </summary>
        /// <returns></returns>
        public static string GetTimeStamp(System.DateTime time,int length=13)
        {
            long ts = ConvertDateTimeToInt(time);
            return ts.ToString().Substring(0,length);
        }
        /// <summary>  
        /// 将c# DateTime时间格式转换为Unix时间戳格式  
        /// </summary>  
        /// <param name="time">时间</param>  
        /// <returns>long</returns>  
        public static long ConvertDateTimeToInt(System.DateTime time)
        {
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
            long t = (time.Ticks - startTime.Ticks) / 10000;   //除10000调整为13位      
            return t;
        }
        /// <summary>        
        /// 时间戳转为C#格式时间        
        /// </summary>        
        /// <param name=”timeStamp”></param>        
        /// <returns></returns>        
        public static DateTime ConvertStringToDateTime(string timeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(timeStamp + "0000");
            TimeSpan toNow = new TimeSpan(lTime);
            return dtStart.Add(toNow);
        }

        /// <summary>
        /// 时间戳转为C#格式时间10位
        /// </summary>
        /// <param name="timeStamp">Unix时间戳格式</param>
        /// <returns>C#格式时间</returns>
        public static DateTime GetDateTimeFrom1970Ticks(long curSeconds)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            return dtStart.AddSeconds(curSeconds);
        }

        /// <summary>
        /// 验证时间戳
        /// </summary>
        /// <param name="time"></param>
        /// <param name="interval">差值(分钟)</param>
        /// <returns></returns>
        public static bool IsTime(long time, double interval)
        {
            DateTime dt = GetDateTimeFrom1970Ticks(time);
            //取现在时间
            DateTime dt1 = DateTime.Now.AddMinutes(interval);
            DateTime dt2 = DateTime.Now.AddMinutes(interval * -1);
            if (dt > dt2 && dt < dt1)
            {
                return true;
            }
            else {
                return false;
            }
        }

        /// <summary>
        /// 判断时间戳是否正确(验证前8位)
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static bool IsTime(string time)
        {
            string str = GetTimeStamp(DateTime.Now,8);
            if (str.Equals(time))
            {
                return true;
            }
            else {
                return false;
            }
        }
    }

转载于:https://www.cnblogs.com/amylis_chen/p/11553107.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript 提供了一些内置的函数和对象可以方便地实现时间时间戳的相互转换。 要将时间戳转换为时间,可以使用 JavaScript 的 Date 对象。例如: ``` // 将时间戳转换为时间 var timestamp = 1615574400; var date = new Date(timestamp * 1000); // 使用 Date 对象的方法格式化时间 console.log(date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate()); // 2021-3-31 ``` 要将时间转换为时间戳,可以使用 Date 对象的 `getTime()` 方法。例如: ``` // 将时间转换为时间戳 var date = new Date("2022-12-17T00:00:00"); var timestamp = Math.floor(date.getTime() / 1000); console.log(timestamp); // 1675446400 ``` 注意,JavaScript 的时间戳是以毫秒为单的,如果要将其转换为以秒为单时间戳,需要使用数学函数 `Math.floor()` 对时间戳进行取整。 另外,还可以使用 JavaScript 的 `toISOString()` 方法将时间转换为 ISO 格式的字符串,再使用正则表达式截取其中的时间戳。例如: ``` // 将时间转换为 ISO 格式的字符串 var date = new Date("2022-12-17T00:00:00"); var isoString = date.toISOString(); // 使用正则表达式截取时间戳 var timestamp = isoString.match(/\d{10}/g)[0]; console.log(timestamp); // 1675446400 ``` 希望这些信息能帮到你! ### 回答2: JavaScript中可以使用Date对象进行时间时间戳之间的转换。 1. 将时间转换为时间戳: 要将一个特定的时间转换为时间戳,可以使用Date对象的getTime()方法。该方法返回的是一个自1970年1月1日以来经过的毫秒数。例如,可以使用下面的代码将当前时间转换为时间戳: ``` var timestamp = new Date().getTime(); ``` 2. 将时间戳转换为时间: 要将一个时间戳转换为时间,可以使用Date对象的构造函数,将时间戳作为参数传入。然后,可以使用该对象的各种方法(例如getFullYear()、getMonth()、getDate()等)来获取年、月、日、时、分、秒等信息。例如,可以使用下面的代码将一个时间戳转换为时间: ``` var timestamp = 1609459200000; // 2021年1月1日的时间戳 var date = new Date(timestamp); console.log(date); ``` 以上代码将打印出:Fri Jan 01 2021 08:00:00 GMT+0800 (中国标准时间) 需要注意的是,JavaScript中的时间戳是以毫秒为单的,而不是以秒为单的。所以在进行时间戳的转换时,需要确保使用正确的单。 总结起来,通过Date对象的getTime()方法可以将时间转换为时间戳,通过Date对象的构造函数可以将时间戳转换为时间。 ### 回答3: JavaScript中时间时间戳之间的相互转换非常简单。时间戳是指从1970年1月1日00:00:00格林威治标准时间(UTC)开始经过的毫秒数。而JavaScript的Date对象表示一个特定的日期和时间。 要将时间戳转换为JavaScript的Date对象,可以使用Date的构造函数。例如,将时间戳1234567890转换为Date对象的代码如下: ```javascript var timestamp = 1234567890; var date = new Date(timestamp); ``` 这样就可以得到表示时间戳对应日期和时间的Date对象。 相反,要将JavaScript的Date对象转换为时间戳,可以使用Date对象的getTime()方法。该方法返回自1970年1月1日00:00:00 UTC到指定日期和时间之间经过的毫秒数。例如,将Date对象转换为时间戳的代码如下: ```javascript var date = new Date(); var timestamp = date.getTime(); ``` 这样就可以得到表示指定Date对象对应的时间戳。 总之,要在JavaScript中进行时间时间戳之间的转换,可以使用Date对象的构造函数将时间戳转换为Date对象,或者使用Date对象的getTime()方法将Date对象转换为时间戳。这两种方法对于时间时间戳之间的转换非常方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值