文字列内のテキストをフォーマットしたいと思います。したがって、テキストを入力すると0759
、フォーマットする必要があります07:59 (minutes and seconds)
。
同じように動作するはずです(疑似コード)
入力 759 -> 出力 07:59
入力 10545 -> 出力 01:05:45 (時間、分、秒)
入力 5 -> 出力 00:05
使おうと思っstring.Format()
たのですが、初心者でやり方がよくわかりません。
ありがとう!
これを達成するには、いくつかの異なるフープをジャンプする必要があります。数値を文字列にキャストし、適切な桁数 (6) を埋める必要があります。次に、適切な情報を使用して DateTime.ParseExact を呼び出す必要があります。以下のコードは、必要なものすべてに対して機能するはずです。
void Main()
{
var i = 10545;
var t = i.ToString().PadLeft(6, '0');
var d = DateTime.ParseExact(t, "HHmmss", System.Globalization.CultureInfo.InvariantCulture );
Console.WriteLine(string.Format("{0:HH:mm:ss}", d));
}
必要な正確な時間、分、秒を取得するには、24 時間形式を使用する必要があります。235959 を超えるとエラーになるため、別の方法で処理する必要があります。
この方法を使用できます:
public static TimeSpan? TryParseTimeSpan(string input)
{
TimeSpan? ts = (TimeSpan?)null;
if (!string.IsNullOrWhiteSpace(input))
{
input = input.Trim();
int length = input.Length % 2 == 0 ? input.Length : input.Length + 1;
int count = length / 2;
if(count > 3) return null;
input = input.PadLeft(count * 2, '0');
string[] validFormats = new[] { "HHmmss", "mmss", "ss" };
DateTime dt;
if (DateTime.TryParseExact(input, validFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
ts = dt.TimeOfDay;
}
return ts;
}
ただし、89 秒の 2 番目の部分は受け入れません。これは有効な入力ではありません (imho)。
このサンプル入力でテスト:
List<string> inputs = new List<string> { "78", "10545", "5" };
IEnumerable<TimeSpan> timeSpans = inputs
.Select(i => TryParseTimeSpan(i))
.Where(ts => ts.HasValue)
.Select(ts => ts.Value);
foreach (TimeSpan ts in timeSpans)
Console.WriteLine(ts.ToString());
出力:
01:05:45
00:00:05
最初に、フォーマット文字列を使用する 00:00 のフォーマットを設定する必要があります"00:00"
string input = 0789
input = String.Format("00:00",input); //input is now 07:89
ただし、これは 4 桁を超える値では機能しません。TimeSpan
オブジェクトにはすでに分と秒のコンポーネントがあるため、これらを処理するにはオブジェクトを使用する方がよいでしょう。
タイムスパン: http://msdn.microsoft.com/en-us/library/system.timespan.aspx
フォーマット ソース: http://msdn.microsoft.com/en-us/library/system.string.format.aspx