以前遇到时间戳,都是那公共类里面的方法来用。未曾理解过它的原理。
C# 时间类型枚举
分为local、utc、以及Unspecified
local:当地时间,例如我们所在的东八区,所采用的北京时间。
utc(Coordinated Universal Time):世界标准时间(可自行深入)。
10位 时间戳是指格林威治时间1970年1月1日00时00分00秒(北京时间1970年1月1日08时00分00秒)起至现在的总秒数。
13位 时间戳是指格林威治时间1970年1月1日00时00分00秒(北京时间1970年1月1日08时00分00秒)起至现在的总毫秒数。
10位 时间戳转为时间格式,即 格林威治时间1970年1月1日00时00分00秒 基础(毫单位)加上 时间戳。
13位 时间戳转为时间格式,即 在格林威治时间1970年1月1日00时00分00秒 基础(毫秒单位)加上 时间戳。
附代码:
/// <summary>
/// 获取当前时间的时间戳(13位)
/// </summary>
/// <returns></returns>
public static long GetTimeStamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
return Convert.ToInt64(ts.TotalMilliseconds);
} /// <summary>
/// 获取当前时间的时间戳(10位)
/// </summary>
/// <returns></returns>
public static long GetTimeStampTen()
{
return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
} /// <summary>
/// 将13位 时间戳转换为日期类型
/// </summary>
/// <param name="longDateTime"></param>
/// <returns></returns>
public static DateTime LongDateTimeToDateTimeString(long unixDate)
{
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
dateTime = dateTime.AddMilliseconds(unixDate).ToLocalTime();
return dateTime;
} /// <summary>
/// 将10位 时间戳转换为日期类型
/// </summary>
/// <param name="longDateTime"></param>
/// <returns></returns>
public static DateTime LongDateTimeToDateTimeString(long unixDate)
{
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
dateTime = dateTime.AddSeconds(unixDate).ToLocalTime();
return dateTime;
}