栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C#时间戳与日期时间DateTime格式互转

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#时间戳与日期时间DateTime格式互转

C#时间戳与日期时间DateTime格式互转
  • 前言
    • 标准格林威治时间
    • 标准北京时间
    • 时间对照表
  • 时间戳在线转换工具
  • 代码如下
  • 输出效果
  • 补充:C#时间格式说明

前言

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
时间戳在线转换工具

https://tool.lu/timestamp

代码如下
    /// 
    /// 时间戳操作类
    /// 
    public class CommonTimeStamp
    {
        #region 标准北京时间(1970年01月01日08时00分00秒)
        #region 10位时间戳转换(秒级)
        /// 
        /// 【秒级】获取时间(北京时间)
        /// 
        /// 10位时间戳
        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;
        }
        /// 
        /// 【秒级】生成10位时间戳(北京时间)
        /// 
        /// 时间
        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位时间戳转换(毫秒级)
        /// 
        /// 【毫秒级】获取时间(北京时间)
        /// 
        /// 10位时间戳
        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;
        }
        /// 
        /// 【毫秒级】生成13位时间戳(北京时间)
        /// 
        /// 时间
        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位时间戳转换(秒级)
        /// 
        /// 【秒级】获取时间(格林威治时间)
        /// 
        /// 10位时间戳
        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;
        }
        /// 
        /// 【秒级】生成10位时间戳(格林威治时间)
        /// 
        /// 时间
        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位时间戳转换(毫秒级)
        /// 
        /// 【毫秒级】获取时间(格林威治时间)
        /// 
        /// 10位时间戳
        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;
        }
        /// 
        /// 【毫秒级】生成13位时间戳(格林威治时间)
        /// 
        /// 时间
        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秒的小数精度为七位。其余数字被截断。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983154.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号