日時をフォーマットした後、時刻には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);
}
}
残念ながら、標準のフォーマット方法ではそれができません。ジョダもそうではありません。フォーマット後の日付を単純なフォーマット後の置換で処理する必要があると思います。
_String str = oldstr.replace("AM", "am").replace("PM","pm");
_
Regepxsを使用するreplaceAll()
メソッドを使用できますが、おそらく上記で十分だと思います。私はnotブランケットtoLowerCase()
をしているsay)月名など。
編集: James Jithinのソリューション ははるかに良く見え、これを行う適切な方法(コメントに記載されているように)
これは動作します
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);
}
}
文字列置換を行いたくない場合、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シンボルを置き換える方法はないと思います。これが最終的な文字列で文字列置換を行う唯一の方法ではありません。
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);
デフォルトの午前、午後以外の異なるスタイルが必要な場合、ジェームズの答えは素晴らしいです。ただし、オーバーライドを採用するには、ロケールとロケール固有の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 で確認できます。
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;ニーズに合わせて異なるロケールを試してください(デフォルトなど)
このように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()