74

日時をフォーマットすると、時刻は大文字で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);  
    }
}
4

9 に答える 9

96

これは動作します

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);
    }
}
于 2012-11-27T10:14:44.927 に答える
84

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

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

regepxsを使用するreplaceAll()方法を使用することもできますが、おそらく上記で十分だと思います。将来、(たとえば)月の名前などを含むようにフォーマット文字列を変更すると、フォーマットが台無しになる可能性があるため、私は包括的ではありません。toLowerCase()

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

于 2012-11-27T10:02:41.217 に答える
7

文字列置換を行いたくなく、Java 8を使用している場合 javax.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"));

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

デフォルトのam/pm記号を置き換える方法はないと思います。これが、最終的な文字列で文字列の置換を行う以外の唯一の方法です。

于 2017-02-26T08:41:13.230 に答える
6

これを試して:

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

ここここで詳しく説明されているように、カスタムフォーマットを作成できる場合がありますが

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

于 2012-11-27T10:03:07.177 に答える
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);
于 2017-12-30T09:47:58.350 に答える
2

デフォルトの午前、午後以外の別のスタイルが必要な場合は、Jamesの答えが最適です。ただし、オーバーライドを採用するには、ロケールとロケール固有のAM/PMセットをマッピングする必要があります。これで、java組み込みのjava.util.Formatterクラスを使用するだけです。したがって、簡単な例は次のようになります。

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

それは与えます:

9pm

大文字が必要な場合は、「%1 $ tp」を「%1$ Tp 」に置き換えてください。詳細については、 http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dtを参照してください。

于 2015-08-06T21:12:33.010 に答える
0

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()場合

于 2017-04-04T12:21:45.287 に答える
0
    String today = now.format(new DateTimeFormatterBuilder()
            .appendPattern("MM/dd/yyyy ")
            .appendText(ChronoField.AMPM_OF_DAY)
            .appendLiteral(" (PST)")
            .toFormatter(Locale.UK));

//出力=>2019年6月18日午前(PST)

Locale.UK=>午前または午後; Locale.US=>AMまたはPM; ニーズに応じて別のロケールを試してください(デフォルトなど)

于 2019-06-18T13:06:16.053 に答える
0

これは、AndroidStudioのJavaコードでUNIXタイムスタンプをパラメーターとして渡す方法です。

private String convertTimeToTimeStamp(Long timeStamp){
            SimpleDateFormat sdf=new SimpleDateFormat("hh:mm aaa", Locale.getDefault());
            return sdf.format(timeStamp);
        }

関数はフォーマット09:30PMの時刻を返します

于 2021-11-24T10:31:13.073 に答える