首页 > 编程语言 >C#时间戳的获取与转换

C#时间戳的获取与转换

时间:2024-08-01 16:18:17浏览次数:8  
标签:转换 TimeZoneInfo C# timestamp long DateTime 获取 时间 startTime

前言

时间戳是指时间从1970年01月01日00时00分00秒至现在的总秒数(北京时间是08时00分00秒),时间戳是使用数字签名技术产生的数据。在软件开发中处理时间戳是一种常见的操作。在C#中如何获取系统时间的时间戳、时间戳与日期的转换等。本文将介绍C#时间戳的一些基本使用。

时间戳

 时间戳默认是Unix时间戳。它与JavaScript时间戳存在一点区别,前者是总秒数,而后者是总毫秒数。时间戳与时区无关。

转换

1、日期转换时间戳

 
// 当前时间
DateTime currentTime = DateTime.Now;
// 当前时间转时间戳
#region 使用 TimeZone 类 
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1, 0, 0, 0, 0));
//除10000调整为13位  
long timeStamp = (currentTime.Ticks - startTime.Ticks) / 10000;
Console.WriteLine(timeStamp);
#endregion

#region 使用 TimeZoneInfo 类 
DateTime startTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc), TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id));
TimeSpan elapsedTime = currentTime - startTime;
long timestamp=(long)elapsedTime.TotalMilliseconds;
Console.WriteLine(timestamp);
#endregion

#region 使用 DateTimeOffset .NET 4.6 及以上
DateTimeOffset dateTimeOffset =new DateTimeOffset(currentTime);
long timeStamp = dateTimeOffset.ToUnixTimeMilliseconds();
Console.WriteLine(timeStamp);
#endregion

2、时间戳转换日期

#region 时间戳长度 13 位 
long timeStamp=1721442434723;
DateTime startTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc), TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id));
DateTime dateTime = startTime.AddMilliseconds(timeStamp);
Console.WriteLine(dateTime.ToString("yyyy-MM-dd HH:mm:ss:ffff"));
#endregion

#region 时间戳长度 11 位 
long timeStamp=1721442434;
DateTime startTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc), TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id));
DateTime dateTime = startTimexx.AddSeconds(timestamp);
Console.WriteLine(dateTime.ToString("yyyy-MM-dd HH:mm:ss"));
#endregion

示例

 定义一个时间戳精确单位枚举
using System;

namespace Fountain.WinConsole.UtilDemo
{
    /// <summary>
    /// 时间戳精确单位
    /// </summary>
    public enum Timestampunits
    {
        Second,
        Millisecond
    }
}

定义一个时间戳处理类 TimeStamp

using System;

namespace Fountain.WinConsole.UtilDemo
{
    public class TimeStamp
    {
        /// <summary>
        /// 日期转时间戳
        /// </summary>
        /// <param name="dateTime">时间</param>
        /// <param name="timestampunits">时间戳精确单位</param>
        /// <returns></returns>
        public static long ToTimestamp(DateTime dateTime, Timestampunits timestampunits)
        {
            DateTime startTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc), TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id));
            TimeSpan elapsedTime = dateTime - startTime;
            long timestamp = (long)elapsedTime.TotalSeconds;
            if (timestampunits==Timestampunits.Millisecond)
            {
                timestamp = (long)elapsedTime.TotalMilliseconds;
            }
            return timestamp;
        }
        /// <summary>    
        /// 时间戳转换为日期
        /// </summary>
        /// <param name="timeStamp">时间戳</param>
        /// <returns></returns>
        public static DateTime ToDataTime(long timeStamp)
        {
            DateTime startTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc), TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id));
            DateTime dateTime;
            if (timeStamp.ToString().Length==13)
            {
                dateTime = startTime.AddMilliseconds(timeStamp);
            }
            else
            {
                dateTime = startTime.AddSeconds(timeStamp);
            }
            return dateTime;
        }
        /// <summary>
        /// 当前时间的时间戳
        /// </summary>
        /// <returns></returns>
        public static long GetTimestamp(Timestampunits timestampunits)
        {
            DateTime startTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc), TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id));
            TimeSpan elapsedTime = DateTime.Now - startTime;
            long timestamp = (long)elapsedTime.TotalSeconds;
            if (timestampunits == Timestampunits.Millisecond)
            {
                timestamp = (long)elapsedTime.TotalMilliseconds;
            }
            return timestamp;
        }
    }
}

调用使用

using System;

namespace Fountain.WinConsole.UtilDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 获取当前时间的时间戳
            Console.WriteLine(TimeStamp.GetTimestamp(Timestampunits.Millisecond));
            // 时间转时间戳
            long timestamp = TimeStamp.ToTimestamp(currentTime, Timestampunits.Millisecond);
            Console.WriteLine(timestamp);
            Console.WriteLine(TimeStamp.ToDataTime(timestamp));
            Console.ReadKey();
        }
    }
}

小结

C#时间戳获取与转换在实际项目中会经常使用,并结合各种其它情况配合对时间操作。

标签:转换,TimeZoneInfo,C#,timestamp,long,DateTime,获取,时间,startTime
From: https://www.cnblogs.com/kongxiaoshuang/p/18336894

相关文章

  • CodeForces 1132B Discounts
    题目链接:CodeForces1132B【Discounts】思路    因为使用coupons购买q[i]块巧克力,不需要付最便宜的那块巧克力的钱,所以为了使得优惠最大化,所以可以在使用优惠券的时候购买最贵的p[i]块巧克力,所以计算所有巧克力价格高之和和排序后很快能得到答案。代码#include<cst......
  • [MRCTF2020]你传你呢
    [MRCTF2020]你传你......
  • Calico VXLAN 模式
    CalicoVxLAN模式一、环境信息主机IPubuntu172.16.94.141软件版本docker26.1.4helmv3.15.0-rc.2kind0.18.0clab0.54.2kubernetes1.23.4ubuntuosUbuntu20.04.6LTSkernel5.11.5内核升级文档二、安装服务kind配置文件......
  • 单个 Scrapy 项目与多个项目
    我对如何存储所有蜘蛛感到困惑。这些蜘蛛将通过使用命令行调用和从stdin读取的项目输入ApacheNiFi来使用。我还计划让这些蜘蛛的子集在单独的网络服务器上使用scrapyrt返回单个项目结果。我需要在具有不同项目模型的许多不同项目中创建蜘蛛。它们都有相似的设置(比......
  • x-cmd pkg | nvim - 命令行文本编辑器,Vim 的一个现代化分支
    目录简介快速入门功能特点Neovim插件推荐相关竞品进一步阅读简介Neovim(简称nvim)是用C语言开发的文本编辑器,是Vim的一个现代化分支,更专注于提升可扩展性和提供更现代的用户体验。它是基于Vim源代码的一个衍生版本,不是一个从头开始重写Vim或将其转换为IDE......
  • 钢铁百科:50号钢对应S50C钢板、50#钢机械性能、50号钢执行标准
    一、50号钢国家标准:   -GB/T699-1988:这是50#钢的主要执行标准,规定了50#钢的化学成分、机械性能等方面的要求。二、50号钢对应牌号:   -日本JIS标准钢号:S50C/S53C   -德国DIN标准材料钢号:1.1213和CF53   -这些标准与GB/T699-1988相似,但可能包含一些特定的......
  • [240801] 类 C 语言 C3 是一种进化,而不是一场革命 | 趣文: find + mkdir 是图灵完备
    目录类C语言C3是一种进化,而不是一场革命C3编程语言特征C3设计原则安装C3编程语言第一个C3项目趣文:find+mkdir是图灵完备类C语言C3是一种进化,而不是一场革命C3是基于C的编程语言,它是C的一种演变,其目标是在尽可能保留C相同语法情况下进行改......
  • 初学者友好!从零到一快速上手PyCharm安装的超详细图解+避坑指南教程
    一,pycharm的官网下载下载地址:www.jetbrains.com/pycharm/本文将从Python解释器安装到Pycharm专业版安装和配置汉化等使用都进行了详细介绍,希望能够帮助到大家。Python解释器&Pycharm安装包&Pycharm破姐插件我都打包好了。 ......
  • 二叉搜索树,Map,Set,LeetCode刷题
    二叉搜索树,Map,Set1.二叉搜索树2.二叉搜索树的模拟实现1.1插入操作1.2查找操作1.3删除操作3.二叉搜索树时间复杂度分析4.TreeMap和TreeSet5.Map5.1Map的常用方法5.2Map.Entry<K,V>6.Set6.1Set的常用方法LeetCode刷题1.二叉搜索树与双向链表1.二叉搜......
  • 【C++】1.C++入门(1)
    文章目录1.C++关键字2.命名空间2.1命名空间定义2.2命名空间使用3.C++输入&输出4.缺省参数4.1缺省参数概念4.2缺省参数分类5.函数重载5.1函数重载概念5.2C++支持函数重载的原理--名字修饰(nameMangling)1.C++关键字C++总计63个关键字,C语言32个关键字2.......