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

爱编程的鼠鼠 2024-01-20 09:53:21

文章目录

.NET Standard 2.0 通用扩展库!开箱即用。 Nuget地址https://www.nuget.org/packages/Sesy Gitee地址https://gitee.com/sesy/sesy

一、时间戳是什么

时间戳是指从格林威治时间(UTC)1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

二、时间戳的优势

  • 精确度高:时间戳能够记录精确到秒、毫秒、甚至微秒的时间,相比人类的日期时间表示方式更加精确。+ 可跨平台:时间戳是一种标准的时间表示方式,不受不同操作系统、程序语言等因素的影响,可以方便地跨平台传输和处理。+ 计算简便:时间戳是一个数字,可以直接进行比较、计算和排序。+ 存储节省:时间戳是一个数值类型,相比日期时间类型,可以节省存储空间。+ 兼容性好:时间戳可以和其他数据类型进行转换。

三、C#代码实现

1.取当前时间戳

/// <summary>
/// 取当前时间的时间戳,高并发情况下会有重复。想要解决这问题请使用加锁或其他方式。
/// </summary>
/// <param name="accurateToMilliseconds">是否精确到毫秒</param>
/// <returns>返回long类型时间戳</returns>
public static long GetTimeStamp(bool accurateToMilliseconds = false)
{
    if (accurateToMilliseconds)
    {
        return DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
    }
    else
    {
        return DateTimeOffset.UtcNow.ToUnixTimeSeconds();
    }
}
static void Main(string[] args)
{
    // 1700227312 精确到秒的时间戳 长度为10
    Console.WriteLine(GetTimeStamp(false));
    // 1700227312509 精确到毫秒的时间戳 长度为13
    Console.WriteLine(GetTimeStamp(true));
}

2.取指定时间戳

/// <summary>
/// 取指定时间的时间戳
/// </summary>
/// <param name="accurateToMilliseconds">是否精确到毫秒</param>
/// <returns>返回long类型时间戳</returns>
public static long GetTimeStamp(DateTime dateTime, bool accurateToMilliseconds = false)
{
    if (accurateToMilliseconds)
    {
        return new DateTimeOffset(dateTime).ToUnixTimeMilliseconds();
    }
    else
    {
        return new DateTimeOffset(dateTime).ToUnixTimeSeconds();
    }
}
static void Main(string[] args)
{
    // 1700227312 精确到秒的时间戳 长度为10
    Console.WriteLine(GetTimeStamp(DateTime.Now, false));
    // 1700227312509 精确到毫秒的时间戳 长度为13
    Console.WriteLine(GetTimeStamp(DateTime.Now, true));
}

3.时间戳转时间

/// <summary>
/// 指定时间戳转为时间。
/// </summary>
/// <param name="timeStamp">需要被反转的时间戳</param>
/// <param name="accurateToMilliseconds">是否精确到毫秒</param>
/// <returns>返回时间戳对应的DateTime</returns>
public static DateTime GetTime(long timeStamp, bool accurateToMilliseconds = false)
{
    if (accurateToMilliseconds)
    {
        return DateTimeOffset.FromUnixTimeMilliseconds(timeStamp).LocalDateTime;
    }
    else
    {
        return DateTimeOffset.FromUnixTimeSeconds(timeStamp).LocalDateTime;
    }
}
static void Main(string[] args)
{
    // 2023/11/17 21:21:52
    Console.WriteLine(GetTime(1700227312, false));
    // 2023/11/17 21:21:52
    Console.WriteLine(GetTime(1700227312509, true));
}

文章来源: https://blog.csdn.net/weixin_44607828/article/details/134470131
版权声明: 本文为博主原创文章,遵循CC 4.0 BY-SA 知识共享协议,转载请附上原文出处链接和本声明。

...全文
1080 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,844

社区成员

发帖
与我相关
我的任务
社区描述
微软技术社区为中国的开发者们提供一个技术干货传播平台,传递微软全球的技术和产品最新动态,分享各大技术方向的学习资源,同时也涵盖针对不同行业和场景的实践案例,希望可以全方位地帮助你获取更多知识和技能。
windowsmicrosoft 企业社区
社区管理员
  • 王瑞MVP
  • 郑子铭
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

微软技术社区为中国的开发者们提供一个技术干货传播平台,传递微软全球的技术和产品最新动态,分享各大技术方向的学习资源,同时也涵盖针对不同行业和场景的实践案例,希望可以全方位地帮助你获取更多知识和技能。

予力众生,成就不凡!微软致力于用技术改变世界,助力企业实现数字化转型。

试试用AI创作助手写篇文章吧