2

現在の日付を次のように表示したい00:50:32 A

これが私のコードです

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss a");
String time = sdf.format(date);
System.out.println("time : " + time);

しかし、それは次のように印刷されます:

time : 00:50:32 AM

HH:mm:ss aと の両方を試しましHH:mm:ss aaaたが、結果は同じです。

4

5 に答える 5

5

できない!パターンが 4 文字以下の場合は、短い形式が使用されます。したがって、「a」、「aa」、「aaa」、および「aaaa」は同一です。

できることは、「a」なしでフォーマットし、「A」または「P」を手動で追加することだけです。

そうは言っても、'HH' (24 時間制) を使用すると、なぜ AM/PM が必要になるのでしょうか?

于 2011-05-05T06:12:39.653 に答える
4

午前/午後のマーカーについては、「短い」と「長い」の間に違いはないと思います。

特に、DateFormatSymbols.getAmPmStrings()2 つの文字列だけを返しますgetShortAmPmStrings()。呼び出しなどはありません。

于 2011-05-05T06:07:20.400 に答える
1

SimpleDateFormat の Javadocからの引用:

書式設定では、パターン文字の数が 4 つ以上の場合、完全な形式が使用されます。それ以外の場合は、利用可能な場合は短縮形または省略形が使用されます

したがって: (a) 違いが見られると予想される場合は、aaaa(4 x a) ではなくaaa(4 x a) を使用します。(b) AM/PM に短い形式 (または長い形式) がない場合、a指定子の繰り返し回数は重要ではありません。

もう少し徹底するために、次のプログラムを実行しました。フォーマットが影響を受けたケースはゼロでした。

Date date = new Date();
int n = 0;
for (String country : Locale.getISOCountries()) {
  for (String language : Locale.getISOLanguages()) {
    Locale loc = new Locale(language, country);
    String as = "";
    String prev = null;
    for (int i = 0; i < 20; ++i) {
      ++n;
      as += "a";
      String current = new SimpleDateFormat(as, loc).format(date);
      if (prev != null && !prev.equals(current)) {
        System.out.println("Locale: " + loc + ", as=" + as + ", current="
          + prev + ", next=" + current);
      }

      prev = current;
    }
  }
}
System.out.println("Tried out " + n + " combinations.");    
于 2011-05-05T06:10:31.443 に答える
0

次に、あなたが持っているオプションは

time = time.substring(0,time.length()-1);

:) ばかげていますが、うまくいきます

于 2011-05-05T06:11:43.053 に答える
0

違いはありません。何が違うと思っていましたか?

このサイトに基づく ( http://javatechniques.com/blog/dateformat-and-simpledateformat-examples /):

「あ」→「午前」</p>

「aa」 -> 「AM」</p>

于 2011-05-05T06:10:08.493 に答える