c# datetime与 timeStamp(unix时间戳) 互相转换

本文介绍如何将Unix时间戳转换为C#格式的时间,同时也提供了将C# DateTime格式转换为Unix时间戳的方法。文章解释了Unix时间戳的概念及其在数据库存储中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        /// <summary>  
        /// Unix时间戳转为C#格式时间  
        /// </summary>  
        /// <param name="timeStamp">Unix时间戳格式,例如1482115779</param>  
        /// <returns>C#格式时间</returns>  
        public static DateTime GetTime(string timeStamp)
        {
            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = long.Parse(timeStamp + "0000000");
            TimeSpan toNow = new TimeSpan(lTime);
            return dtStart.Add(toNow);
        }


        /// <summary>  
        /// DateTime时间格式转换为Unix时间戳格式  
        /// </summary>  
        /// <param name="time"> DateTime时间格式</param>  
        /// <returns>Unix时间戳格式</returns>  
        public static int ConvertDateTimeInt(System.DateTime time)
        {
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
            return (int)(time - startTime).TotalSeconds;
        } 

为什么使用时间戳?

关于Unix时间戳,大概是这个意思,从1970年0时0分0秒开始到现在的秒数.使用它来获得的是一个INT值,储存在数据库里只要使用INT格式就可以了,方便数据库进行排序,搜索,而且比datetime格式更节省数据库空间。

<think>好的,用户想要在C#中生成一个10位的Unix时间戳。首先,我需要回忆Unix时间戳的定义,它是指自1970年1月1日UTC以来的秒数,所以10位长度代表的是秒级精度。而C#中通常获取时间戳的方式可能会返回毫秒级的,也就是13位数字,因此需要转换。 接下来,我得考虑如何获取当前时间Unix纪元(1970-01-01)的时间差。在C#中,可以使用DateTime.UtcNow来避免时区问题,然后减去new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)得到TimeSpan。TimeSpan的TotalSeconds属性会给出总秒数,包括小数部分,但用户需要的是整数部分,所以需要强制转换为long,再转换为字符串确认位数。 不过,用户需要确保生成的确实是10位数。当前时间(比如2023年)减去1970年的秒数肯定是超过10亿秒的,也就是10位数,所以直接取整应该没问题。但需要注意转换时是否会有溢出,不过long类型足够大,应该没问题。 然后,编写示例代码,展示如何获取时间戳。可能需要检查是否有更简洁的方式,比如使用DateTimeOffset的方法,因为DateTimeOffset.ToUnixTimeSeconds()直接返回long型的秒数,这应该更高效。不过要确认该方法在较旧的.NET版本中是否可用,比如在.NET 4.6及以上才支持,但用户可能使用的是较新版本,所以推荐这个方法会更简单。 另外,用户可能需要处理不同时区的问题,所以使用UtcNow是正确的选择。最后,测试代码,确保生成的timestamp确实是10位,没有多余的数字。例如,当前时间转换后是否为10位,可能需要举例子说明。 总结步骤:获取当前UTC时间,计算Unix纪元的差值,取总秒数的整数部分,转换为字符串确认长度。或者使用DateTimeOffset的方法直接获取。需要提供两种方法,并说明推荐的方式。</think>在C#中生成10位Unix时间戳(秒级精度)可通过以下步骤实现: 1. **获取当前UTC时间** Unix时间戳基于UTC时区,使用`DateTime.UtcNow`获取当前时间以避免时区误差。 2. **计算时间差并转换** 计算当前时间Unix纪元时间(1970-01-01 00:00:00 UTC)的差值,提取总秒数: ```csharp DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); TimeSpan timeSpan = DateTime.UtcNow - epoch; long timestamp = (long)timeSpan.TotalSeconds; ``` 3. **优化实现(推荐方法)** 使用`DateTimeOffset`内置方法直接获取秒级时间戳[^1]: ```csharp long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); ``` 两种方法均生成如`1659373562`的10位数字,对应当前UTC时间的秒级计数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值