2012-02-15 6 views
0

3分の時間値を取得するには(たとえば、15.02.2012 07:00:00、15.02.2012 07:03:00、15.02.2012 07:06:00、...正確な3分の時間値の取得

static private DateTime CurrentTime (DateTime now) 
     { 
      DateTime val; 
      val = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0) 
        .AddMinutes(((now.Minute)/3) * 3 - now.Minute); 
      return val; 
     } 

、次のコードでこれを使用します:

static void Main(string[] args) 
     { 
      DateTime ts = new DateTime(2012, 2, 15, 08, 1, 0); 
      DateTime ts1 = new DateTime(2012, 2, 15, 7, 59, 58); 
      Console.WriteLine(ts.ToString("dd.MM.yyyy HH:mm:ss.fff") + " is " + CurrentTime(ts).ToString("dd.MM.yyyy HH:mm:ss.fff")); 
      Console.WriteLine(ts1.ToString("dd.MM.yyyy HH:mm:ss.fff") + " is " + CurrentTime(ts1).ToString("dd.MM.yyyy HH:mm:ss.fff")); 
     } 

そして出力:

15.02.2012 08:01:00.000 is 15.02.2012 08:00:00.000 
15.02.2012 07:59:58.000 is 15.02.2012 07:57:00.000 

しかし、第二で、2012年2月15日午前7時57分00秒)私は、次のコードを使用します私は間違いを覚えています - 代わりに2005年2月15日07:57:00.000は15.02.2012 08:00:00.000でなければなりません。 この間違いを修正するには?ありがとう。

+0

時間を最も近い3分の時間値に丸めます。これは問題ですか? –

+0

私は最も近い3分値を切り捨てるのではなく、07:59:30.000と08:00:30.000の間の値の場合、最も近い3分に丸め(下または上)したい - 結果は08: 00:00.000 – amaranth

+0

07:58:30.000から08:01:30.000までの時間は、08:00:00.000に切り上げる必要がありますか?私はこれに対する答えを掲示した。 –

答えて

0

を:

static private DateTime CurrentTime (DateTime now) 
{ 
    return now.Date.AddSeconds((now.TimeOfDay.TotalSeconds + 90)/180 * 180); 
} 
+0

私は、Console.WriteLine(ts.ToString( "dd.MM.yyyy HH:mm:ss.fff")+ "+ CurrentTime(ts.AddSeconds(60))を作成します。ToString(" dd.MM.yyyy HH :mm:ss.fff ")); ToString( "dd.MM.yyyy HH:mm:ss.fff")+ "CurrentTime(ts1.AddSeconds(60))。ToString(" dd.MM.yyyy HH:mm: ss。( "dd.MM.yyyy HH:mm:ss.fff")+ "CurrentTime(ts2.AddSeconds(60))。ToString(" dd.MM ");.yyyy HH:mm:ss.fff "));取得:15.02.2012 08:01:00.000は15.02.2012 08:00:00.000 15.02.2012 07:59:58.000は15.02.2012 08:00: 00.000 15.02.2012 07:59:58.000は15.02.2012です08:00:00.000 – amaranth

+0

私は問題が解決したと思う...今=)ありがとう!!! – amaranth

+0

ドミトリーは私の次の質問http:// stackoverflowを見てください。 com/questions/9290401/accurate-three-minute-time-timer-intervals – amaranth

0

now.Minutes 59

3分の59 = 19

19 * 3 = 57

57である場合、このビットは

AddMinutes(((now.Minute)/3) * 3 - now.Minute) 

間違っている - 59 = -2

59 + -2 = 57(あなたが見ているようなもの)

切り捨てではなく丸くしたいので、最も簡単なことは「今」に3分の半分を追加することです。

DateTime tmp = now.AddMilliseconds(90*1000); 
+0

例:次の時間の値は15.02.2012 07:59:58.000ですか?この値を最も近い3分の時間値に丸めたい。そして、一般的には、07:59:30.000と08:00:30.000の間の値の場合、結果を08:00:00.000にする必要があります。 – amaranth

+0

90秒を追加して既存のコードを使用すると効果があります。おそらくもっと良い方法がありますが、これはうまくいくと思います。 – John3136

+0

07:59:30.000と08:00:30.000の間の値の場合、60秒になることがあります - 結果は08:00:00.000でなければなりませんか? – amaranth

0

あなたが分に秒数で、追加する分の数を乗算し、次の機能を使用することができたDateTimeに3分を追加するには:

private static DateTime AddNMinutes(DateTime dateTime, int numberOfMinutes) 
{ 
    return dateTime.AddSeconds(numberOfMinutes * 60); 
} 

をして、それを呼び出します使用して:あなたは、次のように口座秒に取る必要が

var myDateTime = DateTime.Now; 
var myDateTimePlusThreeMinutes = AddNMinutes(myDateTime, 3); 
関連する問題