2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C#のDateTime型・TimeSpan型の加算関数(AddSeconds・AddDays等)は、1ms以下の値を扱わない模様

Last updated at Posted at 2023-01-22

まとめ(実測結果)

  • C#のDateTime型では、1ms以下の値を扱わない模様。
  • C#のTimeSpan型でも、1ms以下の値を扱わない模様。
     ↓ 訂正
  • 実測の結果、C#のDateTime型の加算関数(AddSeconds等)では、1ms以下の値を扱わない模様。
    • AddSeconds(1.0001)で0.1msの単位を追加しても、Tick値には反映されない。
  • 実測の結果、C#のTimeSpan型でも加算関数(AddSeconds等)では、1ms以下の値を扱わない模様。

テストコード

Program 2301-1 AddSecondsテスト.cs
using System;

namespace ConsoleApp1 {
    class Program {
        static void Main(string[] args) {
            /* 結果: 
C#のDateTime型では、1ms以下の値を扱わない模様。
AddSeconds(1.0001)で0.1msの単位を追加しても、Tick値には反映されない。

10,000,000[Tick/1s]
20,000,000[Tick/2s]
10,010,000[Tick/1.001s]
10,000,000[Tick/1.0001s]
10,000,000[Tick/1.000499s]
10,010,000[Tick/1.0005s]

864,000,000,000[Tick/1d]
1,728,000,000,000[Tick/2d]
864,000,010,000[Tick/1.00000001d]
864,000,000,000[Tick/1.000000001d]
*/

            var t1 = DateTime.Parse("2023/01/01");
            var t2 = t1.AddSeconds(1);
            Console.WriteLine($"{t2.Ticks - t1.Ticks:#,0}[Tick/1s]");

            t2 = t1.AddSeconds(2);
            Console.WriteLine($"{t2.Ticks - t1.Ticks:#,0}[Tick/2s]");

            t2 = t1.AddSeconds(1.001);
            Console.WriteLine($"{t2.Ticks - t1.Ticks:#,0}[Tick/1.001s]");

            t2 = t1.AddSeconds(1.0001);
            Console.WriteLine($"{t2.Ticks - t1.Ticks:#,0}[Tick/1.0001s]");

            t2 = t1.AddSeconds(1.000499);
            Console.WriteLine($"{t2.Ticks - t1.Ticks:#,0}[Tick/1.000499s]");

            t2 = t1.AddSeconds(1.0005);
            Console.WriteLine($"{t2.Ticks - t1.Ticks:#,0}[Tick/1.0005s]");


            t2 = t1.AddDays(1);
            Console.WriteLine($"{t2.Ticks - t1.Ticks:#,0}[Tick/1d]");

            t2 = t1.AddDays(2);
            Console.WriteLine($"{t2.Ticks - t1.Ticks:#,0}[Tick/2d]");

            t2 = t1.AddDays(1.00000001);
            Console.WriteLine($"{t2.Ticks - t1.Ticks:#,0}[Tick/1.00000001d]");

            t2 = t1.AddDays(1.000000001);
            Console.WriteLine($"{t2.Ticks - t1.Ticks:#,0}[Tick/1.000000001d]");

            /* 結果: 
C#TimeSpan型でも、1ms以下の値を扱わない模様。
AddSeconds(1.0001)で0.1msの単位を追加しても、Tick値には反映されない。

10,000,000[Tick/1s]
20,000,000[Tick/2s]
10,010,000[Tick/1.001s]
10,000,000[Tick/1.0001s]
10,000,000[Tick/1.000499s]
10,010,000[Tick/1.0005s]

864,000,000,000[Tick/1d]
1,728,000,000,000[Tick/2d]
864,000,010,000[Tick/1.00000001d]
864,000,000,000[Tick/1.000000001d]
*/

            t2 = t1.AddSeconds(1);
            Console.WriteLine($"{(t2 - t1).Ticks:#,0}[Tick/1s]");

            t2 = t1.AddSeconds(2);
            Console.WriteLine($"{(t2 - t1).Ticks:#,0}[Tick/2s]");

            t2 = t1.AddSeconds(1.001);
            Console.WriteLine($"{(t2 - t1).Ticks:#,0}[Tick/1.001s]");

            t2 = t1.AddSeconds(1.0001);
            Console.WriteLine($"{(t2 - t1).Ticks:#,0}[Tick/1.0001s]");

            t2 = t1.AddSeconds(1.000499);
            Console.WriteLine($"{(t2 - t1).Ticks:#,0}[Tick/1.000499s]");

            t2 = t1.AddSeconds(1.0005);
            Console.WriteLine($"{(t2 - t1).Ticks:#,0}[Tick/1.0005s]");


            t2 = t1.AddDays(1);
            Console.WriteLine($"{(t2 - t1).Ticks:#,0}[Tick/1d]");

            t2 = t1.AddDays(2);
            Console.WriteLine($"{(t2 - t1).Ticks:#,0}[Tick/2d]");

            t2 = t1.AddDays(1.00000001);
            Console.WriteLine($"{(t2 - t1).Ticks:#,0}[Tick/1.00000001d]");

            t2 = t1.AddDays(1.000000001);
            Console.WriteLine($"{(t2 - t1).Ticks:#,0}[Tick/1.000000001d]");
        }
    }
}

環境

Microsoft Visual Studio Community 2019 Version 16.11.22
VisualStudio.16.Release
Microsoft .NET Framework
Version 4.8.04084
image.png

2
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?