まとめ(実測結果)
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