前言
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)
是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
Unix时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z.
一个小时表示为Unix时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。
在大多数的Unix系统中Unix时间戳存储为32位,这样会引发2038年问题或Y2038。
标准格林威治时间
1970年01月01日 00时00分00秒 起 至现在的总(毫)秒数
标准北京时间
1970年01月01日 08时00分00秒 起 至现在的总(毫)秒数
时间对照表
时间 | 秒 |
---|---|
1 分钟 | 60 |
1 小时 | 3600 |
1 天 | 86400 |
1 周 | 604800 |
1 月 (30.44 天) | 2629743 |
1年 (365.24 天) | 31556736 |
时间戳在线转换工具
代码如下
/// <summary>
/// 时间戳操作类
/// </summary>
public class CommonTimeStamp
{
#region 标准北京时间(1970年01月01日08时00分00秒)
#region 10位时间戳转换(秒级)
/// <summary>
/// 【秒级】获取时间(北京时间)
/// </summary>
/// <param name="timestamp">10位时间戳</param>
public static DateTime GetDateTimeSeconds(long timestamp)
{
long begtime = timestamp * 10000000;
DateTime dt_1970 = new DateTime(1970, 1, 1, 8, 0, 0);
long tricks_1970 = dt_1970.Ticks;//1970年1月1日刻度
long time_tricks = tricks_1970 + begtime;//日志日期刻度
DateTime dt = new DateTime(time_tricks);//转化为DateTime
return dt;
}
/// <summary>
/// 【秒级】生成10位时间戳(北京时间)
/// </summary>
/// <param name="dt">时间</param>
public static long GetTimeStampSeconds(DateTime dt)
{
DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
return Convert.ToInt64((dt - dateStart).TotalSeconds);
}
#endregion
#region 13位时间戳转换(毫秒级)
/// <summary>
/// 【毫秒级】获取时间(北京时间)
/// </summary>
/// <param name="timestamp">10位时间戳</param>
public static DateTime GetDateTimeMilliseconds(long timestamp)
{
long begtime = timestamp * 10000;
DateTime dt_1970 = new DateTime(1970, 1, 1, 8, 0, 0);
long tricks_1970 = dt_1970.Ticks;//1970年1月1日刻度
long time_tricks = tricks_1970 + begtime;//日志日期刻度
DateTime dt = new DateTime(time_tricks);//转化为DateTime
return dt;
}
/// <summary>
/// 【毫秒级】生成13位时间戳(北京时间)
/// </summary>
/// <param name="dt">时间</param>
public static long GetTimeStampMilliseconds(DateTime dt)
{
DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
return Convert.ToInt64((dt - dateStart).TotalMilliseconds);
}
#endregion
#endregion
#region 标准格林威治时间(Unix时间戳:1970年01月01日00时00分00秒)
#region 10位时间戳转换(秒级)
/// <summary>
/// 【秒级】获取时间(格林威治时间)
/// </summary>
/// <param name="timestamp">10位时间戳</param>
public static DateTime GetUnixDateTimeSeconds(long timestamp)
{
long begtime = timestamp * 10000000;
DateTime dt_1970 = new DateTime(1970, 1, 1, 0, 0, 0);
long tricks_1970 = dt_1970.Ticks;//1970年1月1日刻度
long time_tricks = tricks_1970 + begtime;//日志日期刻度
DateTime dt = new DateTime(time_tricks);//转化为DateTime
return dt;
}
/// <summary>
/// 【秒级】生成10位时间戳(格林威治时间)
/// </summary>
/// <param name="dt">时间</param>
public static long GetUnixTimeStampSeconds(DateTime dt)
{
DateTime dateStart = new DateTime(1970, 1, 1, 0, 0, 0);
return Convert.ToInt64((dt - dateStart).TotalSeconds);
}
#endregion
#region 13位时间戳转换(毫秒级)
/// <summary>
/// 【毫秒级】获取时间(格林威治时间)
/// </summary>
/// <param name="timestamp">10位时间戳</param>
public static DateTime GetUnixDateTimeMilliseconds(long timestamp)
{
long begtime = timestamp * 10000;
DateTime dt_1970 = new DateTime(1970, 1, 1, 0, 0, 0);
long tricks_1970 = dt_1970.Ticks;//1970年1月1日刻度
long time_tricks = tricks_1970 + begtime;//日志日期刻度
DateTime dt = new DateTime(time_tricks);//转化为DateTime
return dt;
}
/// <summary>
/// 【毫秒级】生成13位时间戳(格林威治时间)
/// </summary>
/// <param name="dt">时间</param>
public static long GetUnixTimeStampMilliseconds(DateTime dt)
{
DateTime dateStart = new DateTime(1970, 1, 1, 0, 0, 0);
return Convert.ToInt64((dt - dateStart).TotalMilliseconds);
}
#endregion
#endregion
}
输出效果
-
标准格林威治时间
datetime格式:(秒级)
2021-10-11 18:00:07
10位时间戳:
1633975207
datetime格式:(毫秒级)
2021-10-11 18:03:02.197
13位时间戳:
1633975382197
-
标准北京时间
datetime格式:(秒级)
2021-10-11 17:57:42
10位时间戳:
1633946262
datetime格式:(毫秒级)
2021-10-11 17:12:19.457
13位时间戳:
1633943539457
补充:C#时间格式说明
日期格式:yyyyMMdd HH:mm:ss(注意严格区分字母大小写)
d月中的某一天。一位数的日期没有前导零。
dd月中的某一天。一位数的日期有一个前导零。
ddd周中某天的缩写名称,在AbbreviatedDayNames中定义。
dddd周中某天的完整名称,在DayNames中定义。
M月份数字。一位数的月份没有前导零。
MM月份数字。一位数的月份有一个前导零。
MMM月份的缩写名称,在AbbreviatedMonthNames中定义。
MMMM月份的完整名称,在MonthNames中定义。
y不包含纪元的年份。如果不包含纪元的年份小于10,则显示不具有前导零的年份。
yy不包含纪元的年份。如果不包含纪元的年份小于10,则显示具有前导零的年份。
yyyy包括纪元的四位数的年份。
gg时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。
h12小时制的小时。一位数的小时数没有前导零。
hh12小时制的小时。一位数的小时数有前导零。
H24小时制的小时。一位数的小时数没有前导零。
HH24小时制的小时。一位数的小时数有前导零。
m分钟。一位数的分钟数没有前导零。
mm分钟。一位数的分钟数有一个前导零。
s秒。一位数的秒数没有前导零。
ss秒。一位数的秒数有一个前导零。
f秒的小数精度为一位。其余数字被截断。
ff秒的小数精度为两位。其余数字被截断。
fff秒的小数精度为三位。其余数字被截断。
ffff秒的小数精度为四位。其余数字被截断。
fffff秒的小数精度为五位。其余数字被截断。
ffffff秒的小数精度为六位。其余数字被截断。
fffffff秒的小数精度为七位。其余数字被截断。