Windows 時代からPCを使っているひとは 流行りのスクリプト言語よりC#で書いたほうが楽もしくは安心だと思います。わたしもmacOSを使うようになって簡単なプログラムならPythonやNode.jsで書いていましたが.NET6が安定して動くので最近はC#言語をmacOSで使うようになりました。
C#のDateTime型で「分・秒・㍉秒」などを0にしたい場合、方法はいろいろあると思いますがわたしの場合下記2つの方法を使っています。
新しくDateTimeを作る
DateTimeのコンストラクタの中に「DateTime(int year, int month, int day, int hour, int minute, int second)」があるのでそれを使います。下のコード例では年月日時以降は0に設定しています。
var d1 = DateTime.Now;
d1 = new DateTime(d1.Year, d1.Month, d1.Day, d1.Hour, 0,0);
Console.WriteLine(d1);
DateTimeのTicksで計算
TimeSpanで、1時間出してその後 Ticksを 剰余演算(%) します。
その後、AddTicksしています。
var ts1 = TimeSpan.FromHours(1);
var d1 = DateTime.Now;
var tt1 = d1.Ticks % ts1.Ticks;
d1 = d1.AddTicks(- tt1);
Console.WriteLine(d1);
Ticksが 637 791 516 000 000 000 計算されました。
内部では GetTickCount64() が使われているのかな?よくわからない