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

前言

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

代码如下

    /// <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秒的小数精度为七位。其余数字被截断。

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中,可以使用以下代码将时间戳转换日期格式输出: ```csharp using System; using UnityEngine; private void Start() { DateTime dateTime = TimestampHelper.GetDateTime(1482115779); Debug.Log(dateTime.Year + "年" + dateTime.Month + "月" + dateTime.Day + "日"); DateTime dateTime_2 = TimestampHelper.GetDateTime("1482115779"); Debug.Log(dateTime_2.Hour + ":" + dateTime.Minute + ":" + dateTime.Second); } public static DateTime GetTime(long TimeStamp, bool AccurateToMilliseconds = false) { System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 if (AccurateToMilliseconds) { return startTime.AddTicks(TimeStamp * 10000); } else { return startTime.AddTicks(TimeStamp * 10000000); } } ``` 这段代码使用了一个名为`TimestampHelper`的静态类来实现时间戳转换日期的功能。在`Start()`方法中,我们首先使用`TimestampHelper.GetDateTime()`方法将时间戳转换为`DateTime`类型的日期时间对象,然后通过访问`DateTime`对象的属性来获取具体的年、月、日等信息,并通过`Debug.Log()`方法将其输出。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C# 工具类:时间戳转换日期格式](https://blog.csdn.net/qq_43505432/article/details/114676442)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C# 时间戳日期](https://blog.csdn.net/weixin_44171249/article/details/125658767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C# DateTime时间戳转换实例](https://download.csdn.net/download/weixin_38638312/12778561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值