Span<Interop.Sys.TimeSpec> buf = stackalloc Interop.Sys.TimeSpec[2];
long seconds = time.ToUnixTimeSeconds();
- long nanoseconds = (time.ToUnixTimeMilliseconds() - seconds * 1000) * 1_000_000;
+
+ const long TicksPerMillisecond = 10000;
+ const long TicksPerSecond = TicksPerMillisecond * 1000;
+ long nanoseconds = (time.UtcDateTime.Ticks - DateTimeOffset.UnixEpoch.Ticks - seconds * TicksPerSecond) * NanosecondsPerTick;
if (isAccessTime)
{
Assert.True(firstFileTicks <= secondFileTicks, $"First File Ticks\t{firstFileTicks}\nSecond File Ticks\t{secondFileTicks}");
}
+ [ConditionalFact(nameof(isNotHFS))] // OSX HFS driver format does not support nanosecond granularity.
+ public void SetUptoNanoseconds()
+ {
+ string file = GetTestFilePath();
+ File.WriteAllText(file, "");
+
+ DateTime dateTime = DateTime.UtcNow;
+ File.SetLastWriteTimeUtc(file, dateTime);
+ long ticks = File.GetLastWriteTimeUtc(file).Ticks;
+
+ Assert.Equal(dateTime, File.GetLastWriteTimeUtc(file));
+ Assert.Equal(ticks, dateTime.Ticks);
+ }
+
+ [Fact]
+ [PlatformSpecific(~TestPlatforms.OSX)] // OSX has the limitation of setting upto 2262-04-11T23:47:16 (long.Max) date.
+ public void SetDateTimeMax()
+ {
+ string file = GetTestFilePath();
+ File.WriteAllText(file, "");
+
+ DateTime dateTime = new DateTime(9999, 4, 11, 23, 47, 17, 21, DateTimeKind.Utc);
+ File.SetLastWriteTimeUtc(file, dateTime);
+ long ticks = File.GetLastWriteTimeUtc(file).Ticks;
+
+ Assert.Equal(dateTime, File.GetLastWriteTimeUtc(file));
+ Assert.Equal(ticks, dateTime.Ticks);
+ }
+
[Fact]
public void SetLastAccessTimeTicks()
{