2016-10-16 10 views
-2

何かのタスクを実行するには現在の時刻が正確に12:03 PMであるかどうかを確認する必要があります。現在時刻が正確に12:03であることを確認するには

これは私がそれを達成しようとしている方法です。

TimeSpan start = TimeSpan.Parse("12:03"); 
TimeSpan now = DateTime.Now.TimeOfDay; 

if (start == now) 
    return true; 
else 
    return false; 

問題: Startセット{12:03:00}

しかし、追加情報を{12:03:01.8493604}からNowセットに。

どうすればこの比較ができますか? 任意のアイデア

+0

これを試してください:DateTime dtNow = DateTime.Now; TimeSpanは新しい= TimeSpan(dtNow.Hour、dtNow.Minute、dtNow.Second)になります。 – jdweng

+1

要件についてより明確にする必要があります。あなたの質問を文字通り取ると、唯一の可能な答えは「できません」です。あなたのコードが 'Now'プロパティgetter _exactly_を12:03 pmに実行する可能性は、基本的にはゼロです。 –

+1

最も実用的なアプローチは、今と午後12時03分の間に 'TimeSpan'を計算し、その時間の間に遅延(例えば' Task.Delay() ')を呼び出して、それに関係なく実行したいものを実行することですタイマーの期限が切れるのを確認してください。 _that_質問への答えは、多くの既存の複製にあります。あなたが何か他のものを望むなら、それをより良く説明する必要があります。 –

答えて

-1

私はあなただけDateTimeの時間と分のコンポーネントを比較する必要があると思う:

var time = new DateTime(2016, 10, 16, 12, 3, 0); 
var now = DateTime.Now; 
if (time.Hour == now.Hour && time.Minute == now.Minute) { 
    Console.WriteLine("Yeah");  
} else { 
    Console.WriteLine("no"); 
} 

丁度12時03分になるようにシステムクロックを取得することはほぼ不可能であろう。そして、コードがの場合にのみ実行するコードを 12:03にしたいとは思いません。ほとんどの場合、時刻が12:03:00から12:03:59の間に実行されるようにします。

+1

あなたは正しいです。コードを12:03:00から12:03:59まで実行したい – simbada

-1

は、あなたがあなたに(そのことについてまたはタイムスパン)2つの日付時刻の差分を与えるTimeSpansを引くことができ、このコード

DateTime start = DateTime.ParseExact("12:03", "hh:mm", CultureInfo.InvariantCulture); 
DateTime end = DateTime.ParseExact(DateTime.Now.ToString("hh:mm"), "hh:mm", CultureInfo.InvariantCulture); 

var n = DateTime.Compare(start, end); 
TimeSpan now = DateTime.Now.TimeOfDay; 

if (n == 0) 
    return true; 
else 
    return false; 
-1

を試してみてください。差があれば、TotalSeconds(またはTotalHours、TotalDaysのような他の同様の名前付きプロパティの1つ)を使用して、その時間ウィンドウの任意のロジックを基にすることができます。

TimeSpan start = TimeSpan.Parse("15:09"); 
TimeSpan now = DateTime.Now.TimeOfDay; 

Action<object> action = (s) => { Console.WriteLine(s); }; // what needs to be executed 

// a 'negative' timespan means we're not there yet 
TimeSpan diff = now - start; 
// within the minute 
if (diff.TotalSeconds > -1 && diff.TotalSeconds < 60) { 
    action("awesome"); // execute 
} 
else 
{ 
    // if we are to early... 
    if (diff.TotalSeconds<0) 
    { 
     // ... schedule the work with a timer 
     // waiting for the difference in the diff TimeSpan to pass 
     new System.Threading.Timer((state) => action(state), // execute 
      "FooBar", // state 
      diff.Duration(), // how long to wait for the abolsute Duration 
      new TimeSpan(-1)); // no repeat 
    } 
    else 
    { 
     // we are late ... 
    } 
} 

ロジックがタイマーから呼び出されるとき、コードは別のスレッドで実行されることに注意してください。あなたのコードがそれを処理できることを確認してください。特に、共有状態やUIのやりとりに注意してください。

関連する問題