C# 时间与时间戳互转的方法(13位)

作者:代码描绘人生 时间:2023-12-04 10:26:39 

目前经常出现的时间有三个:

  • 本地时间(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/testsec/p/6095945.html

标签:C#,时间,时间戳
0
投稿

猜你喜欢

  • 关于SpringBoot整合RabbitMQ实现死信队列

    2022-03-29 23:27:05
  • SpringBoot利用限速器RateLimiter实现单机限流的示例代码

    2023-04-05 19:57:50
  • 详解C#中通过委托来实现回调函数功能的方法

    2021-08-14 05:02:58
  • Java 十大排序算法之希尔排序刨析

    2021-11-16 09:27:31
  • 在Visual Studio上构建C++的GUI框架wxWidgets的开发环境

    2023-04-12 01:02:06
  • Android数字华容道小游戏开发

    2023-10-06 22:31:35
  • 基于Java ActiveMQ的实例讲解

    2023-08-24 08:39:38
  • JAVA实现基于Tcp协议的简单Socket通信实例

    2022-07-07 21:44:36
  • Android中通过MediaStore获取音乐文件信息方法

    2021-09-30 17:53:24
  • Spring Boot Logback配置日志过程解析

    2022-12-09 18:08:06
  • android多线程断点下载-带进度条和百分比进度显示效果

    2022-03-20 14:30:43
  • Android编程之消息机制实例分析

    2023-07-28 07:24:38
  • Java设计模式之java组合模式详解

    2022-05-02 07:52:38
  • Flutter app页面路由以及路由拦截的实现

    2023-06-23 14:21:18
  • 提示出现unresolved external symbol _main的解决方法

    2023-02-13 03:41:48
  • C#实现支付宝沙箱支付的项目实践

    2021-07-29 17:18:18
  • java实现支付宝支付接口的调用

    2023-10-13 09:43:40
  • c#实现无标题栏窗口的拖动

    2022-12-26 06:15:15
  • Flutter 剪裁组件的使用

    2023-06-18 13:15:04
  • Java 调用Restful API接口的几种方式(HTTPS)

    2021-06-19 02:26:55
  • asp之家 软件编程 m.aspxhome.com