Javaの日付形式-追加の文字を含む


88

Javaのphpdate()スタイルのフォーマットに相当するものはありますか?つまり、phpでは、文字をバックスラッシュエスケープして文字通りに処理することができます。つまり、yyyy \ y \ e \ a \ r2010年になります。Javaで類似したものは見つかりませんでした。すべての例は、組み込みの日付形式のみを扱っています。

特に、JCalendarの日付ピッカーとそのdateFormatStringプロパティを扱います。

私のロケールでは、dのように、あらゆる種類の追加のものを日付形式で記述する必要があるため、これが必要です。(日のために)日の部分の後、m。(何年も)何年も経った後など。最悪の場合、文字列置換または正規表現を使用できますが、もっと簡単な方法があるのではないでしょうか。前もって感謝します!


1
2019年以降にこれを読んでいる人にとってSimpleDateFormat、いくつかの回答で使用されているクラスは、面倒で古くからあることで有名です。それを避けてください。代わりに、最新のJava日付と時刻APIであるjava.timeの使用を示すMarkJeronimusによる短い回答を使用してください
OleVV19年

回答:


165

もちろん、SimpleDateFormatを使用すると、リテラル文字列を含めることができます。

日付と時刻のパターン文字列内で、「A」から「Z」および「a」から「z」までの引用符で囲まれていない文字は、日付または時刻の文字列のコンポーネントを表すパターン文字として解釈されます。解釈を避けるために、テキストは一重引用符( ')を使用して引用できます。「 ''」は一重引用符を表します。他のすべての文字は解釈されません。それらは、フォーマット中に出力文字列にコピーされるか、解析中に入力文字列と照合されます。

 "hh 'o''clock' a, zzzz"    12 o'clock PM, Pacific Daylight Time

スーパー、まさにそれが私に必要なものです。驚いたことに、私がWebで閲覧した多数の例のいずれにも、このような単純なものは見つかりませんでした:)どうもありがとうございました!
セヤヌス2010年

1
引用文字をエスケープするにはどうすればよいですか?mm 'の形式で何かをしようとしています。たとえば、46 'のように46分を示します。
ソッティ2014年

3
@ソッティ: 46''。最初に2番目を脱出します。
Thilo 2014年

1
参考までに、などのひどく面倒な日時クラスjava.util.Datejava.util.Calendarjava.text.SimpleDateFormat今のレガシーに取って代わられ、java.timeのJavaの8に、後に内蔵されたクラス。
バジルバーク



6

java.time

マークジェロニムスはすでにそれを言った。私はそれをもう少し肉付けしています。印刷するテキストを一重引用符で囲むだけです。

    DateTimeFormatter yearFormatter = DateTimeFormatter.ofPattern("yyyy 'year'");
    System.out.println(LocalDate.of(2010, Month.FEBRUARY, 3).format(yearFormatter));
    System.out.println(Year.of(2010).format(yearFormatter));
    System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Vilnius")).format(yearFormatter));

今実行中の出力:

2010 year
2010 year
2019 year

あなたがAを使用している場合はDateTimeFormatterBuilder、そのappendPattern方法を、同じように単一引用符を使用します。または、appendLiteral代わりにそのメソッドを使用し、一重引用符は使用しないでください。

では、どのようにして一重引用符をフォーマットに入れるのでしょうか?2つの一重引用符が1つを生成します。二重一重引用符が一重引用符の中にあるかどうかは関係ありません。

    DateTimeFormatter formatterWithSingleQuote = DateTimeFormatter.ofPattern("H mm'' ss\"");
    System.out.println(LocalTime.now(ZoneId.of("Europe/London")).format(formatterWithSingleQuote));

10 28 '34 "

    DateTimeFormatter formatterWithSingleQuoteInsideSingleQuotes
            = DateTimeFormatter.ofPattern("hh 'o''clock' a, zzzz", Locale.ENGLISH);
    System.out.println(ZonedDateTime.now(ZoneId.of("America/Los_Angeles"))
            .format(formatterWithSingleQuoteInsideSingleQuotes));

午前2時、太平洋夏時間

上記のすべてのフォーマッタは、解析にも使用できます。例えば:

    LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote);
    System.out.println(time);

16:43:56

ザ・ SimpleDateFormatこの質問は、ほぼ10年前に頼まれたときに使用されるクラスは、悪名高い厄介と長い時代遅れです。代わりに、最新のJava日付と時刻APIであるjava.timeを使用することをお勧めします。それが私がまさにそれを示す理由です。

リンク


-4

java.text.SimpleDateFormat

SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); 
String formattedDate = formatter.format(date);

ここで詳細情報を取得しますリンクテキスト

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.