关于DateTime的AddTicks方法

本文介绍了 DateTime 类中的 AddTicks 方法,解释了如何使用该方法来增加时间,并通过示例展示了如何实现精确的时间调整。

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

学习DateTime的时候,瞥见一眼下面的代码

DateTime dt= DateTime.Now;
Console.WriteLine(dt.AddTicks(2000).ToString());

然而并不知道AddTicks是什么玩意。好奇心使然,看了下说明,定义这么写的

 //
        // 摘要: 
        //     返回一个新的 System.DateTime,它将指定的计时周期数加到此实例的值上。
        //
        // 参数: 
        //   value:
        //     以 100 纳秒为单位的计时周期数。value 参数可以是正数也可以是负数。
        //
        // 返回结果: 
        //     System.DateTime,其值是此实例所表示的日期和时间与 value 所表示时间之和。
        //
        // 异常: 
        //   System.ArgumentOutOfRangeException:
        //     所生成的 System.DateTime 小于 System.DateTime.MinValue 或大于 System.DateTime.MaxValue。
        public DateTime AddTicks(long value);


写一段试试啥效果:

using System;

namespace TestAddTicks
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime dt = DateTime.Parse("2015/05/20 15:15:15.865");
            Console.WriteLine(dt.AddTicks(2000).ToString());
            Console.WriteLine(dt.ToString());
            Console.ReadKey();
        }
    }
}

运行得到下面


貌似值没有发生改变,常识不足的我更糊涂了,100纳秒和秒怎么换算?查了下得到下面这张表


要让输出结果多1秒就是10^9纳秒,除以100为10^7=10,000,000,

AddTicks()括号里面写20,000,000才时间差能加2秒

using System;

namespace TestAddTicks
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime dt = DateTime.Parse("2015/05/20 15:15:15.865");
            Console.WriteLine(dt.AddTicks(20000000).ToString());
            Console.WriteLine(dt.ToString());
            Console.ReadKey();
        }
    }
}

运行结果:


果然差两秒,不过现在不知道这个AddTicks()有啥用。


### 处理 DateTime微秒操作 在 C# 中,`DateTime` 类本身并不直接支持微秒级别的精度。然而,可以通过 `Ticks` 属性来间接处理微秒级别的时间戳。每个 `Tick` 表示 100 纳秒,因此可以利用这个特性来进行更精细的操作。 为了获取当前时间并精确到微秒,可以使用如下方法: ```csharp long microsecondTimestamp = (DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond * 1000L); ``` 这段代码通过将 UTC 当前时间转换成 Ticks 数量,并除以每毫秒对应的 Tick 数 (`TimeSpan.TicksPerMillisecond`) 来获得以毫秒为基础的时间戳,再乘以 1000 将其扩展至微秒范围[^2]。 如果希望创建一个新的 `DateTime` 对象并且指定它带有特定数量的微秒,则需要先计算出相应的 Ticks 值,再加上额外的微秒部分所代表的 Ticks 数量: ```csharp // 创建一个基于 Unix epoch 起始点的新 DateTime 实例 var unixEpochStart = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // 添加给定数量的微秒作为 Ticks 到起始时刻上 int microsecondsToAdd = 12345; var resultWithMicroseconds = unixEpochStart.AddTicks(microsecondsToAdd * 10); // 每个微秒等于十个 Ticks ``` 对于存储和检索具有更高精度的数据,在某些情况下可能还需要考虑数据库系统的兼容性和数据类型的选取。例如 MySQL 数据库中的 DATETIME 和 TIMESTAMP 字段仅能保存到秒级或最多毫秒级精度;而 BIGINT 可用于储存完整的 Ticks 或者自定义格式化后的高精度时间字符串[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值