44

時間は 16:23:01 です。を使ってみDateTime.ParseExactましたが、うまくいきません。

これが私のコードです:

string Time = "16:23:01"; 
DateTime date = DateTime.ParseExact(Time, "hh:mm:ss tt", System.Globalization.CultureInfo.CurrentCulture);

lblClock.Text = date.ToString();

ラベルに 04:23:01 PM として表示したい。

4

4 に答える 4

87

「16:23:01」は「hh:mm:ss tt」のパターンと一致しません。午前/午後指定子がなく、16 は明らかに 12 時間制ではありません。解析部分でその形式を指定しているので、既存のデータの形式と一致させる必要があります。あなたがしたい:

DateTime dateTime = DateTime.ParseExact(time, "HH:mm:ss",
                                        CultureInfo.InvariantCulture);

(現在の文化ではなく、不変の文化に注意してください。入力が常にコロンを使用していると仮定します。)

フォーマットする場合は、その部分を呼び出しhh:mm:ss ttに入れる必要があります。ToString

lblClock.Text = date.ToString("hh:mm:ss tt", CultureInfo.CurrentCulture);

または、さらに良い(IMO)「文化の長いパターンが何であれ」を使用します。

lblClock.Text = date.ToString("T", CultureInfo.CurrentCulture);

hhまた、異常なことにも注意してください。通常、10 未満の数値の数値を 0-left-pad したくありません。

(また、タイプを持つ私のNoda Time API の使用を検討してLocalTimeください。これは、「時刻」だけにより適切に一致します。)

于 2013-09-20T14:42:36.437 に答える
12
string Time = "16:23:01";
DateTime date = DateTime.Parse(Time, System.Globalization.CultureInfo.CurrentCulture);

string t = date.ToString("HH:mm:ss tt");
于 2013-09-20T14:47:41.400 に答える
5

これにより、必要な結果が得られます。

string time = "16:23:01";
var result = Convert.ToDateTime(time);
string test = result.ToString("hh:mm:ss tt", CultureInfo.CurrentCulture);
//This gives you "04:23:01 PM"  string

CultureInfo.CreateSpecificCulture("en-US")すべての文化が AM/PM を表示するわけではないので、これを使用することもできます。

于 2013-09-20T14:49:24.053 に答える