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

2020-01-05 09:51:01王旭

通过上面的了解,我们可以认为格林威治时间就是时间协调时间(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;
      }
    }
  }