web-dev-qa-db-ja.com

AMとPMを日付のフォーマット後に小文字で表示する

日時をフォーマットした後、時刻にはAMまたはPMが大文字で表示されますが、amやpmのように小文字で表示したいです。

これは私のコードです:

public class Timeis {
    public static void main(String s[]) {
        long ts = 1022895271767L;
        String st = null;  
        st = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(ts);
        System.out.println("time is " + ts);  
    }
}
61
xrcwrn

残念ながら、標準のフォーマット方法ではそれができません。ジョダもそうではありません。フォーマット後の日付を単純なフォーマット後の置換で処理する必要があると思います。

_String str = oldstr.replace("AM", "am").replace("PM","pm");
_

Regepxsを使用するreplaceAll()メソッドを使用できますが、おそらく上記で十分だと思います。私はnotブランケットtoLowerCase()をしているsay)月名など。

編集: James Jithinのソリューション ははるかに良く見え、これを行う適切な方法(コメントに記載されているように)

65
Brian Agnew

これは動作します

public class Timeis {
    public static void main(String s[]) {
        long ts = 1022895271767L;
        SimpleDateFormat sdf = new SimpleDateFormat(" MMM d 'at' hh:mm a");
        // CREATE DateFormatSymbols WITH ALL SYMBOLS FROM (DEFAULT) Locale
        DateFormatSymbols symbols = new DateFormatSymbols(Locale.getDefault());
        // OVERRIDE SOME symbols WHILE RETAINING OTHERS
        symbols.setAmPmStrings(new String[] { "am", "pm" });
        sdf.setDateFormatSymbols(symbols);
        String st = sdf.format(ts);
        System.out.println("time is " + st);
    }
}
80
James Jithin

これを試して:

System.out.println("time is " + ts.toLowerCase());

here および here のような詳細なカスタム形式を作成できる場合があります

残念ながら box AMおよびPMは標準のSimpleDateFormatクラスではカスタマイズできないようです

6
RNJ

文字列置換を行いたくない場合、Java 8javax.time

Map<Long, String> ampm = new HashMap<>();
ampm.put(0l, "am");
ampm.put(1l, "pm");

DateTimeFormatter dtf = new DateTimeFormatterBuilder()
        .appendPattern("E M/d h:mm")
        .appendText(ChronoField.AMPM_OF_DAY, ampm)
        .toFormatter()
        .withZone(ZoneId.of("America/Los_Angeles"));

小文字のam/pmにはパターンシンボルがないため、DateTimeFormatter(個々のピースを指定)を手動で作成する必要があります。前後にappendPatternを使用できます。

デフォルトのam/pmシンボルを置き換える方法はないと思います。これが最終的な文字列で文字列置換を行う唯一の方法ではありません。

5
Calendar c = Calendar.getInstance();

System.out.println("Current time => " + c.getTime());

SimpleDateFormat df = new SimpleDateFormat("HH:mm a");
String formattedDate = df.format(c.getTime());
formattedDate = formattedDate.replace("a.m.", "AM").replace("p.m.","PM");

TextView textView = findViewById(R.id.textView);
textView.setText(formattedDate);
4
Mourya

デフォルトの午前、午後以外の異なるスタイルが必要な場合、ジェームズの答えは素晴らしいです。ただし、オーバーライドを採用するには、ロケールとロケール固有のAM/PMセットとの間のマッピングが必要であると思います。ここで、Java組み込みのJava.util.Formatterクラスを使用します。したがって、簡単な例は次のようになります。

System.out.println(String.format(Locale.UK, "%1$tl%1$tp", LocalTime.now()));

それは与えます:

9pm

大文字が必要な場合は、「%1 $tp」を「%1 $」に置き換えてください。 [〜#〜] t [〜#〜]p "。詳細は http://docs.Oracle.com/javase/8/docs/api/Java/util/Formatter.html#dt で確認できます。

1
ShenYi
    String today = now.format(new DateTimeFormatterBuilder()
            .appendPattern("MM/dd/yyyy ")
            .appendText(ChronoField.AMPM_OF_DAY)
            .appendLiteral(" (PST)")
            .toFormatter(Locale.UK));

//出力=> 06/18/2019 am(PST)

Locale.UK => amまたはpm; Locale.US => AMまたはPM;ニーズに合わせて異なるロケールを試してください(デフォルトなど)

0
dfostic

このようにtoLowarCase()を追加するだけです

_public class Timeis {
public static void main(String s[]) {
      long ts = 1022895271767L;
      String st = null;  
      st = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(ts).toLowerCase();
      System.out.println("time is " + ts);  
}
}
_

大文字が必要な場合はtoUpperCase()

0
3zcs