6

完全なインスタンスを、実際の時刻DateTimeを表す1時間、1分、1秒と、それらのトリプレット(たとえば、時間、分秒など)で操作できる機能と比較するための推奨されるアプローチは何ですか?add


私の現在のアプローチは次のようなものです

DateTime startHour = new DateTime(1900,1,1,12,25,43);
DateTime endHour = new DateTime(1900,1,1,13,45,32);

// I need to, say, know if a complete DateTime instance 
// is later than startHour plus 15 minutes

DateTime now = DateTime.Now();

startHour = startHour.addMinutes(15);

if (now.CompareTo(new DateTime(now.Year, now.Month, now.Day, startHour.Hour, 
                    startHour.Minute, startHour.Second)) > 0) 
{
    //I can do something now
}

これは非常に面倒で、失敗しがちです。TimeSpansはスパンを表し、24時間の制限に拘束されないため、私が見る限り解決策ではありません(TimeSpan56時間34分が有効です)。

このタイプの計算に適したアプローチは何ですか?

4

4 に答える 4

11

「startHourよりも大きい」とはどういう意味かはまったくわかりませんが、

TimeSpan startHour = new TimeSpan(12, 25, 43);
if (endHour.TimeOfDay > startHour)
{
    ...
}

...非常に簡単に機能します。

必ず引数チェックを追加して、startHourに<0または>23時間の値を指定しないようにしてください。ただし、これはすべて非常に簡単です。

.NETの日付と時刻のAPIは、たとえばJoda Timeと比較すると(3.5でも)非常に原始的ですが、この特定のケースでは、それほど悪くはないと思います。

于 2009-09-10T23:08:31.777 に答える
2

ちょっとしたヒント-.NETはDateTimeオブジェクトの算術演算をサポートし、TimeSpanオブジェクトを返します。したがって、次のことができます。

DateTime fromDate = ....
DateTime toDate = ....
TimeSpan diff = toDate - fromDate;

これを次のように拡張できます。

DateTime fromDate = DateTime.Now;
DateTime toDate = DateTime.Now.addMinutes(x);

if ((toDate - fromDate).TotalMinutes > 15) {
    ...
}
于 2009-09-10T23:39:49.787 に答える
1

startHourとendHourにはTimeSpanを使用する必要があります。今と比較するときは、それらを完全なDateTimeに「変換」するか、JonSkeetが述べたようにDateTime.TimeOfDayで時刻を取得する必要があります。


TimeSpan startHour = new TimeSpan(12, 25, 43);
DateTime now = DateTime.Now;

if (now.CompareTo(DateTime.Today.Add(startHour)) > 0) {
    //...
}

また


TimeSpan startHour = new TimeSpan(12, 25, 43);
DateTime now = DateTime.Now;

if (now.TimeOfDay.CompareTo(startHour) > 0) {
    //...
}
于 2009-09-10T23:09:32.087 に答える
0

したがって、日付の時間コンポーネントにのみ関心があります。

if(DateTime.Now.TimeOfDay > startHour.TimeOfDay)
{
  // do stuff
}

これを行うことの何が問題になっていますか?

于 2009-09-10T23:15:31.007 に答える