C# 时间戳(TimeStamp)与时间(DateTime)的互相转换

在C#中,时间戳(TimeStamp)与时间(DateTime)之间的转换是常见的操作。时间戳通常指的是自某一特定时刻(如Unix纪元,即1970年1月1日午夜UTC)以来的秒数或毫秒数。在.NET中,我们通常处理的是毫秒数的时间戳,因为DateTime类型在内部就是以这种方式存储的。

时间(DateTime)转时间戳(毫秒)

要将DateTime转换为时间戳(毫秒),可以使用DateTime的Ticks属性,并将其转换为毫秒。但是,更直接和常用的方法是使用DateTimeOffsetToUnixTimeMilliseconds方法(对于Unix时间戳),或者通过计算与Unix纪元的时间差来手动获得毫秒数。

using System;

public class Program
{
    public static void Main()
    {
        DateTime now = DateTime.UtcNow; // 或者 DateTime.Now 根据需要选择
        long timestampMillis = now.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;

        // 或者使用 DateTimeOffset(.NET Framework 4.0+ 或 .NET Core)
        DateTimeOffset nowOffset = DateTimeOffset.UtcNow;
        long timestampMillisOffset = nowOffset.ToUnixTimeMilliseconds();

        Console.WriteLine($"Timestamp (milliseconds): {timestampMillis}");
        Console.WriteLine($"Timestamp (milliseconds using DateTimeOffset): {timestampMillisOffset}");
    }
}

注意:DateTime.UtcNowDateTimeOffset.UtcNow返回的是UTC时间。如果需要本地时间的时间戳,应该使用DateTime.Now,但请注意时区差异可能会影响时间戳的计算。

时间戳(毫秒)转时间(DateTime)

要将时间戳(毫秒)转换回DateTime,可以使用Unix纪元(1970年1月1日午夜UTC)作为基准点,然后添加相应的毫秒数。

using System;

public class Program
{
    public static void Main()
    {
        long timestampMillis = 1609459200000; // 示例时间戳
        DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(timestampMillis);

        // 或者使用 DateTimeOffset
        DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(timestampMillis);
        DateTime dateTimeFromOffset = dateTimeOffset.UtcDateTime; // 如果需要UTC时间

        Console.WriteLine($"DateTime: {dateTime.ToString("yyyy-MM-dd HH:mm:ss")} UTC");
        Console.WriteLine($"DateTimeOffset: {dateTimeFromOffset.ToString("yyyy-MM-dd HH:mm:ss")} UTC");
    }
}

这里展示了两种将毫秒时间戳转换回DateTime的方法:直接使用DateTime和DateTimeKind.Utc,或者使用DateTimeOffset的FromUnixTimeMilliseconds方法。注意,DateTimeOffset.UtcDateTime属性返回的是UTC时间。如果需要本地时间,可以省略.UtcDateTime部分,直接使用dateTimeOffset.DateTime,但这将保留原始时区信息(如果有的话)。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AitTech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值