C# 生成时间戳

/// <summary>  
/// 获取时间戳  
/// </summary>  
/// <returns></returns>  
public static string GetTimeStamp()  
{  
    TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);  
    return Convert.ToInt64(ts.TotalSeconds).ToString();  
}  

### 如何在 C# 中获取时间戳C# 编程中,可以通过多种方式来生成时间戳。以下是几种常见的实现方法: #### 方法一:使用 `DateTimeOffset` 类(适用于 .NET 4.6 及以上版本) 如果项目运行环境支持 .NET 4.6 或更高版本,则可以利用 `DateTimeOffset` 的内置方法快速生成 Unix 时间戳。 ```csharp long timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); Console.WriteLine(timestamp); ``` 此代码片段通过调用 `ToUnixTimeSeconds()` 方法返回自 1970 年 1 月 1 日 UTC 时间以来经过的秒数[^3]。 --- #### 方法二:兼容旧版框架的传统计算法 对于不支持 `.ToUnixTimeSeconds()` 方法的低版本框架,可采用手动计算的方式生成时间戳。 ```csharp private static long GetTimestamp() { var startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return (long)(DateTime.UtcNow - startTime).TotalSeconds; } Console.WriteLine(GetTimestamp()); ``` 该方法创建了一个基于 UTC 的起始时间点,并将其与当前时间相减得到总秒数[^4]。 --- #### 方法三:封装为属性供便捷访问 为了提高代码复用性和简洁度,还可以将时间戳逻辑封装到类的一个只读属性中。 ```csharp public class TimeHelper { public long Timestamp => DateTimeOffset.Now.ToUnixTimeSeconds(); // 使用新特性 [.NET 4.6+] public long LegacyTimestamp { get { var epochStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return (long)(DateTime.UtcNow - epochStart).TotalSeconds; } } } ``` 在此示例中定义了两个属性分别对应现代和传统两种风格的时间戳生成方案[^4]。 --- #### 转换回 DateTime 对象 当需要把已有的时间戳还原成对应的日期时间形式时,也可以借助类似的技巧完成反向操作。 ```csharp static DateTime ConvertFromTimestamp(long timestampInSeconds) { var epochStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return epochStart.AddSeconds(timestampInSeconds); } // 测试转换功能 long sampleTimestamp = 1573696406L; // 假设这是某个有效的时间戳值 DateTime convertedDate = ConvertFromTimestamp(sampleTimestamp); Console.WriteLine(convertedDate); // 输出结果应接近于 '2019-11-14' ``` 这里展示了如何依据给定整型参数重新构建关联的具体时刻实例[^5]。 --- ### 注意事项 - **精度差异**:上述例子主要讨论的是以秒为单位记录过去多久的标准 UNIX 时间戳;但在某些场景下可能还会遇到毫秒级甚至更精细粒度的情况,请根据实际需求调整算法细节。 - **线程安全性**:尽管这些函数本身通常是安全可靠的,但如果涉及到跨多个线程共享状态的操作仍需额外小心设计同步机制以防冲突发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值