0

時間値の文字列配列を蓄積し、合計時間が 1 日を超えているかどうかを確認したいと考えています。このテスト ケースでは、午前 12:00 に開始して 12 時間を追加します。次に、12 時間 5 分を追加します。合計時間は 24 時間 5 分である必要があります。

問題は、午後 12:00 から午前 0:05 までの計算が、12 時間 5 分ではなく 11 時間 55 分と計算されていることです。

ユースケースでこれらの時間を正しく累積するにはどうすればよいですか?

string[] times = {"12:00 AM", "12:00 PM", "12:05 AM"};
const string timePattern = "h:mm tt";

double totalMillis = 0;
var prevTimeSpan = new TimeSpan(0);

foreach (var time in times)
{
    var parsedDate = DateTime.ParseExact(time, timePattern, null, DateTimeStyles.None);
    var currTimeSpan = parsedDate.TimeOfDay;
    var millis = Math.Abs((prevTimeSpan - currTimeSpan).TotalMilliseconds);
    prevTimeSpan = currTimeSpan;
    totalMillis += millis;
}

// 24 hours = 86400000
Console.WriteLine("Result is more than 24 hours? {0}", totalMillis >= 86400000 ? "Yes" : "No");
4

6 に答える 6

0

この特定のユース ケースのソリューションは次のとおりです。

string[] times = {"12:00 AM", "12:00 PM", "12:00 AM"};
const string timePattern = "h:mm tt";

double totalMillis = 0;
var prevTimeSpan = new TimeSpan(0);

foreach (var time in times)
{
    var parsedDate = DateTime.ParseExact(time, timePattern, null, DateTimeStyles.None);
    var currTimeSpan = parsedDate.TimeOfDay;
    var millis = (prevTimeSpan - currTimeSpan).TotalMilliseconds;
    prevTimeSpan = currTimeSpan;
    totalMillis += millis;
}

// 24 hours = 86400000
Console.WriteLine("Result is more than 24 hours? {0}", totalMillis >= 0 ? "No" : "Yes");

totalMillis が 1 日より大きいかどうかをチェックする代わりに、それが負になるかどうかだけをチェックしていることに注意してください。文字列配列を、日付を含まない合計の時間範囲に変換するのは興味深いと思います。

于 2013-10-10T18:44:57.207 に答える
0

したがって、おそらく DateTime で操作します。

string[] times = { "12:00 AM", "12:00 PM", "12:05 AM" };
         const string timePattern = "h:mm tt";

         var dateTime = new DateTime(2010,1,1,0,0,0,0);
         foreach (var time in times)
         {
            var parsedDate = DateTime.ParseExact(time, timePattern, null, DateTimeStyles.None);
            dateTime = dateTime.AddHours(parsedDate.Hour);
            dateTime = dateTime.AddMinutes(parsedDate.Minute);
         }
         Console.WriteLine(a.ToShortTimeString());
         Console.ReadKey();

今、コンピューターはあなたが新しい日にいることを知っています

于 2013-10-10T18:46:52.770 に答える