2011-09-14 6 views
0

私は再発生時間スパンを設定する必要があるという状況があります(この例では、午後6時〜 )C#での義務的な日付の問題 - UtcNowが指定された時間間隔の間にあるかどうかを確認する

日付はこれに関連しません。毎日チェックすることが想定されています。

DateTime.UtcNowを使用すると適切な時間が得られますが、正しい日が得られないため、私は頭を悩ましています。ただし、DateTime.MinValueを使用しても現在の時刻は得られません。私は手動で日付を設定することができませんでした。それは真夜中のUTCとの間にあるかどうかを確認するには...私は...と思うが、これは現時点での私のわずかなコードで、

var start = DateTime.MinValue.Date.Add(new TimeSpan(18, 0, 0)); 
      var end = DateTime.MinValue.Date.Add(new TimeSpan(6, 0, 0)); 
      var timezone = TimeZone.CurrentTimeZone.GetUtcOffset(start); 
      var now = DateTime.UtcNow; 
      now.Date = DateTime.MinValue; 

      // is right now greater than 6pm est? 
      Console.WriteLine(start.TimeOfDay < now); 
      Console.WriteLine(end < DateTime.UtcNow); 
      Console.WriteLine(start.ToShortTimeString()); 
      Console.WriteLine(DateTime.UtcNow.TimeOfDay); 
      Console.WriteLine(timezone.ToString()); 

      Console.ReadLine(); 
+1

now.Date = DateTime.MinValue; //エラー:読み取り専用プロパティ –

+0

はい、日付に直接設定しようとすると機能しないという質問に記載されています。私を許して、その行はコメントアウトされているはずです。 – Ciel

+1

6PM - 6AMはそのような日付ではないので、探しているものがわからない – V4Vendetta

答えて

1

私はあなたが達成したいものとしてではなく、チェックのようなものではないでしょうのために確認していませんこれはあなたのためになります

DateTime dt3 = DateTime.UtcNow; 
if(dt3.Hour <= 6 || dt3.Hour >=18)//24 hr format 
    MessageBox.Show("6PM - 6AM range");// UTC will have only one time and should get satisfied irrespective of date 
+0

私は実際に演算子を反転しなければなりませんでした(> = 6と<= 18に変更してください)が、これは私に正しい評価を与えました!常にそれがいつも動くかどうか確認するためにいくつかのテストを行っています。 – Ciel

+0

文を反転するのは今のところ働いていますが、私の計算が間違っていると思います。私は実際の数字を再考する必要があります... – Ciel

+0

Ok。これは今や理にかなっています。ここで間違っていたものがあります。 'UtcNow'は、期待通りにUTC時刻を返します。しかし、UTCの '6'はローカルでは午前6時ではありません。実際には、コードは__correct__データを返していましたが、私の脳は__local__データを考えていました。私はUTCで標準化するために数値を調整しました。疑問に残るのはDaylightSavingsだけです... – Ciel

0

を、私は、スタックオーバーフロー上の他の記事を探求してきた、と私は何かを誤解だし、 6AM UTCまたは午後6時UTCと深夜のUTCとの間で次の日、あなたは2つの節を結合する必要があるとしている:

bool IsNowInTimeSpan = (DateTime.UtcNow >= DateTime.Date && DateTime.UtcNow <= DateTime.Date.AddHours(6)) || 
         (DateTime.UtcNow >= DateTime.Date.AddHours(18) && DateTime.UtcNow <= DateTime.Date.AddDays(1)); 
関連する問題