私は日時を持ってDateTime.Now
います。受け取った日時との違いを示してバインドしたいと思います。結果は次のようになります。
1d 15h 13m 7s
それを行う最良の方法は何ですか?StringFormat
? IValueConverter
?
TimespansToString
メソッドとカスタム TimeSpan フォーマット文字列を使用することをお勧めします
ご存じないかもしれませんが、タイムスパンはこのような時間間隔を測定するために設計されており、ある日付から別の日付を差し引くことで便利に取得できます。
var startDate = new DateTime(2013,1,21);
var currentDate = DateTime.Now;
TimeSpan interval = currentDate - startDate;
string intervalInWords = String.Format("{0:%d} days {0:%h} hours {0:%m} minutes {0:%s} seconds", interval);
Console.WriteLine(intervalInWords);
これは次のようなものを出力します
267日 10時間45分21秒
これらの日時は異なるタイムゾーン/夏時間にある可能性があるため、コメントで指摘されているように、この手法の使用には十分注意する必要があります。可能であれば、年間を通じて一貫した UTCtime を両方に使用するだけで十分です。一般に、すべての日時をタイムゾーン/オフセット (必要な場合) とともに UTC として保存し、特定のタイムゾーン オフセットで必要な場合は、表示時に変換することが最善の方法です。
TimeSpan を使用できます。[こちら][1] も参照してください。
[1]: 2 つの datetime 値の差を時間単位で表示しています。TimeSpan を使用することをお勧めします。
DateTime startDate = Convert.ToDateTime(2008,8,2);
DateTime endDate = Convert.ToDateTime(2008,8,3);
TimeSpan duration = startDate - endDate;