-4

単純なケース1:

入力:

29:00:00 28:30:20 27:10:11 26:00:01 25:00:40 08:11:12 12:10:18 15:05:05

出力:

05:00:00 04:30:20 03:10:11 02:00:01 01:00:40 08:11:12 12:10:18 15:05:05

動作しない私の関数:

public static DateTime ParseDate(string s)
{
  DateTime result;
  if (!DateTime.TryParse(s, out result))
  {
    result = DateTime.ParseExact(s, "29:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
    result = result.AddDays(1);
  }
  return result;
}

ParseDate("27:10:11");

エラーが発生します:文字列が有効な日時として認識されませんでした。

4

3 に答える 3

3

これにはカスタムコードが必要です。DateTime.TryParseは適切なツールではありません。タイムスパンを見てください。それはあなたがやろうとしていることは何でも解決します。ただし、.net4.0以降の時間部分で>23をチェックする必要があります。

//                     23:0:0        23:00:00 
//                     24:0:0   Parse operation failed. 

TimeSpan msdn

于 2012-11-19T11:02:40.610 に答える
3

それが実際にはaであり、 ( )TimSpanを返したいと仮定します。ビアまたは24時間を超えるビアは作成できないことに注意してください。あなたはこのようにそれをする必要があります:DateTimeDateTime.Today + timespanTimeSpanParseParseExact

public static DateTime GetAddTimespan(string span)
{
    var tokens = span.Split(':');
    TimeSpan ts = new TimeSpan(
                  int.Parse(tokens[0]),    // hours
                  int.Parse(tokens[1]),    // minutes
                  int.Parse(tokens[2]));   // seconds)                              
    return DateTime.Today + ts;
}
于 2012-11-19T11:07:36.637 に答える
1

DateTImeは有効なタイムスタンプではないため、これを行うことはできません。あなたはTimeSpanでそのようなことをすることができます

public static DateTime ParseDate(string s)
{
  var tokens = s.Split(':').Select(x => int.Parse(x));
  var now = DateTime.Now;
  return new DateTime(now.Year,
                      now.Month,
                      now.day,
                      tokens[0] % 24,
                      tokens[1],
                      tokens[2]);
}

これは単にコンテンツを解析し、時間の値が0〜23(両方を含む)であることを確認します。解析にエラー処理がないため、入力が有効である必要があります

DAteTime値を探しているので、日付と時刻を指定する必要があります。上記のコードは、日付が今日である必要があり、時間の値が23より大きいかどうかを無視できることを前提としています。

于 2012-11-19T11:04:44.910 に答える