10

私は世界の多くの国で見られるかもしれないアプリに取り組んでいます。区切り文字として:以外のもので時、分、秒を表示する国は多くありませんが、いくつかあります。その地域の時刻が正しくフォーマットされていることを確認したいと思います。DateTimeはこれで素晴らしいですが、TimeSpanはそうではありません。これらのスニペットは、地域をマラヤーラム語(インド)に設定して.Net4を使用しているVisualStudio2010の直接のウィンドウからのものです。dateTime.Now呼び出しは、時計、Microsoft Outlook、およびその他の領域での時刻の表示方法も反映しています。

DateTime.Now.ToString()
"02-10-12 17.00.58"

http://msdn.microsoft.com/en-us/library/dd784379.aspxは次のように述べています。「formatProviderがnullの場合、現在のカルチャに関連付けられているDateTimeFormatInfoオブジェクトが使用されます。formatがカスタムフォーマット文字列の場合、formatProviderパラメータ無視されます。」それなら、CurrentCultureInfoを渡す必要さえないはずだというのは当然のことです。ここで必要な形式はhh.mm.ssですが、他のほとんどの言語では明らかにhh:mm:ssであり、他の可能性がある場合は、それらも自動的に反映する必要があります。は。

でも:

timeRemaining.ToString()
"00:02:09"
timeRemaining.ToString("c")
"00:02:09"
timeRemaining.ToString("c", CultureInfo.CurrentCulture)
"00:02:09"
timeRemaining.ToString("g")
"0:02:09"
timeRemaining.ToString("G")
"0:00:02:09.0000000"
timeRemaining.ToString("t")
"00:02:09"
timeRemaining.ToString("g", CultureInfo.CurrentCulture)
"0:02:09"
timeRemaining.ToString("g", CultureInfo.CurrentUICulture)
"0:02:09"
timeRemaining.ToString("G", CultureInfo.CurrentUICulture)
"0:00:02:09.0000000"
timeRemaining.ToString("G", CultureInfo.CurrentCulture)
"0:00:02:09.0000000"
timeRemaining.ToString("t", CultureInfo.CurrentCulture)
"00:02:09"

カルチャーを意識した方法でtimeSpanを出力するためのシンプルな1行を探しています。どんなアイデアでも大歓迎です。

4

3 に答える 3

8

バグのようです。connect.microsoft.com で報告できます。その間、回避策は DateTime 形式を利用することです。このような:

using System;
using System.Globalization;

class Program {
    static void Main(string[] args) {
        var ci = CultureInfo.GetCultureInfo("ml-IN");
        System.Threading.Thread.CurrentThread.CurrentCulture = ci;
        var ts = new TimeSpan(0, 2, 9);
        var dt = new DateTime(Math.Abs(ts.Ticks));
        Console.WriteLine(dt.ToString("HH:mm:ss"));
        Console.ReadLine();
    }
}

出力:

00.02.09

于 2012-10-02T22:53:23.583 に答える
1

カルチャに対応した方法で timeSpan を出力するための単純な単一行を探しています。

DateTime次に、クラスを使用してフォーマットを行うのが最善だと思います。

string display = new DateTime(timespan.Ticks).ToLongTimeString();

timespan0 から 24 時間の間の正の期間を保持すると仮定します。

于 2015-01-30T14:07:13.560 に答える