UNIX时间戳 其实是现在的时间到伦敦时间1970-01-01 00:00:00 秒的时间时间, 我们是在东8区,当时的北京时间是1970-01-01 08:00:00
所以:
Unix时间戳 = 我们当前的时间 Date.Now - 我们这个时区的当时那个时间,也就是 1970-01-01 08:00:00
所以是: TimeSpan ts = DateTime.Now- TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
后面是过的1970-1-1我们这个时区的时间,也就是1970-01-01 08:00:00
附录:源码: 或者是,将当前时间转化为伦敦时间
Convert.ToInt32((time.ToUniversalTime() - new DateTime(1970,1,1)).TotalSeconds);
在js中可以这样得到这个事件:
parseInt(date.getTime() / 1000);
而这个事件时有误的: 这个会多了8个小时的时间
parseInt((new Date() - new Date(1970,0,1)) / 1000)
而这样是正确的:
parseInt((new Date() - new Date(0)) / 1000)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace QDTravel.TCApi { public class DateTimeHelper { #region 私有构造函数,防止被实例化。 /// <summary> /// 初始化 <see cref="DateTimeHelper"/> 类的新实例。 /// </summary> private DateTimeHelper() { } #endregion #region 将时间转换成UNIX时间戳。[GetStamp(DateTime time)] /// <summary> /// 将时间转换成UNIX时间戳。 /// </summary> /// <param name="dt">时间。</param> /// <returns>UNIX时间戳。</returns> public static UInt32 GetStamp(DateTime time) { if (time <= DateTime.MinValue) time = new DateTime(1990, 1, 1); TimeSpan ts = time - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); UInt32 uiStamp = Convert.ToUInt32(ts.TotalSeconds); return uiStamp; } #endregion #region 将当前时间转换成UNIX时间戳。[GetStamp()] /// <summary> /// 将当前时间转换成UNIX时间戳。 /// </summary> /// <returns>UNIX时间戳。</returns> public static UInt32 GetStamp() { return GetStamp(DateTime.Now); } #endregion #region 将UNIX时间戳转换成时间。[GetDateTime(UInt32 uiStamp)] /// <summary> /// 将UNIX时间戳转换成时间。 /// </summary> /// <param name="uiStamp">UNIX时间戳。</param> /// <returns>时间。</returns> public static DateTime GetDateTime(UInt32 uiStamp) { DateTime dt = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)).AddSeconds(uiStamp); return dt; } #endregion } }