プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2019/04/09

[C#] DateTime の不要な桁を切り捨てる拡張メソッド

update2021/06/02 event_note2019/04/08 23:40

日時の比較の際、例えば求められている精度が秒までの場合は、ミリ秒やナノ秒の差は無視して比較する必要があります。
そんなとき、あらかじめ不要な桁は切り捨てて取得しておきたいことがあります。

これを簡単にする、DateTime の不要な桁を切り捨てる便利な拡張メソッドを見つけたので、紹介します。

拡張メソッド

public static DateTime Truncate(this DateTime dateTime, TimeSpan timeSpan)
{
    if (timeSpan == TimeSpan.Zero) return dateTime;
    return dateTime.AddTicks(-(dateTime.Ticks % timeSpan.Ticks));
}

サンプルコード

var format = "yyyy-MM-dd HH:mm:ss.fffffff";

var date = DateTime.Now;
Console.WriteLine(date.ToString(format));

// マイクロ秒以下を切り捨て(精度をミリ秒までにする)
date = date.Truncate(TimeSpan.FromMilliseconds(1));
Console.WriteLine(date.ToString(format));

// ミリ秒以下を切り捨て(精度を秒までにする)
date = date.Truncate(TimeSpan.FromSeconds(1));
Console.WriteLine(date.ToString(format));

// 秒以下を切り捨て(精度を分までにする)
date = date.Truncate(TimeSpan.FromMinutes(1));
Console.WriteLine(date.ToString(format));

実行結果

2019-04-08 23:28:19.0981660
2019-04-08 23:28:19.0980000
2019-04-08 23:28:19.0000000
2019-04-08 23:28:00.0000000