LocalDateを文字列にフォーマットする方法は?


156

日付と呼ばれるLocalDate変数があり、それを印刷すると1988-05-05と表示されます。これを変換して05.May 1988として印刷する必要があります。これを行う方法は?


3
DateTimeFormatterクラスを見てください。Strings との間の変換方法の例も含まれています。
azurefrog、2015年

2
他の人があなたを助けられるように、いくつかのコード、これまでに試したこと、機能していないことを示す必要があります。
bvidal 2015年

やってみたのですが、やっとあきらめた「品質基準を満たしていない」ので、「i」を「I」に修正しなければならなかったので、投稿するだけで15分かかりました。
Jasko、2015年

回答:


306

彼は私が見ることができるものからのJava 8で新たに追加されLOCALDATEで始まるされている場合のSimpleDateFormatは動作しません、あなたがしてDateTimeFormatter、使用する必要がありますhttp://docs.oracle.com/javase/8/docs/api/java/をtime / format / DateTimeFormatter.html

LocalDate localDate = LocalDate.now();//For reference
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd LLLL yyyy");
String formattedString = localDate.format(formatter);

1988年5月5日と表示されます。翌日から前月までの期間を取得するには、「dd'.LLLL y​​yyy」を使用する必要がある場合があります。


4
ありがとうございます、これは役に立ちますが、月の名前を表示するための「LLLL」では機能しませんでしたが、「MMMM」では、ドキュメントにもそうではないと記載されているので、私はこれが奇妙なことに気づきました。 。
Jasko

2
ここでlocalDate.format(formatter); まったく機能しない
EngineSense

どのバージョンのJDKを使用して@ProgrammersBlock
Lova Chittumuri

29

短くなる可能性があります:

LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));

3
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd.MMMM yyyy")));

上記の答えは今日のそれを示しています


ofPatternsにはAndroid Oが必要
マディ

0

ProgrammersBlockの投稿の助けを借りて、私はこれを思いつきました。私のニーズは少し異なりました。文字列を取得してLocalDateオブジェクトとして返す必要がありました。以前のカレンダーとSimpleDateFormatを使用していたコードを渡されました。もう少し最新にしたかった。これが私が思いついたものです。

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;


    void ExampleFormatDate() {

    LocalDate formattedDate = null;  //Declare LocalDate variable to receive the formatted date.
    DateTimeFormatter dateTimeFormatter;  //Declare date formatter
    String rawDate = "2000-01-01";  //Test string that holds a date to format and parse.

    dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE;

    //formattedDate.parse(String string) wraps the String.format(String string, DateTimeFormatter format) method.
    //First, the rawDate string is formatted according to DateTimeFormatter.  Second, that formatted string is parsed into
    //the LocalDate formattedDate object.
    formattedDate = formattedDate.parse(String.format(rawDate, dateTimeFormatter));

}

うまくいけば、これは誰かを助けるでしょう、誰かがこのタスクを行うより良い方法を見つけた場合は、入力を追加してください。


私はより良い方法を見つけます:ただLocalDate.parse(rawDate)String.formatここでは完全に間違った形式で使用されており、実際には最初の文字列を返すだけです。これDateTimeFormatterはまったく使用されていません。parsestaticメソッドですLocalDateformattedDateない形式の日付ではなく、さらにString(問題の要求どおり)
user85421は、

0

joda libのLocalDateをフォーマットする組み込みの方法があります

import org.joda.time.LocalDate;

LocalDate localDate = LocalDate.now();
String dateFormat = "MM/dd/yyyy";
localDate.toString(dateFormat);

まだ持っていない場合は、これをbuild.gradleに追加します。

implementation 'joda-time:joda-time:2.9.5'

幸せなコーディング!:)


1
javadocによらない。
Edward

@エドワード、そうでない場合は、それを証明し、あなたがより良いと思うソリューションを提供してください。
Inoy

1
LocalDate.toString(String pattern)が存在しないことを私に証明してほしいですか?存在する場合は、そのメソッドへの参照を提供してください-私はどのjavadocでもそれを見つけることができませんでした。解決策としては、この質問にはすでにそれがあります。
Edward

@エドワード、それを見つけるのに苦労しているようです。私の答えを更新しました。
Inoy

Joda Timeは「組み込み」ではありません。OPはjoda.timeではなくjava.time.LocalDateを使用しているようです
Edward

-11

これを行うためのかなり良い方法は、使用SimpleDateFormat方法を説明することです。

SimpleDateFormat sdf = new SimpleDateFormat("d MMMM YYYY");
Date d = new Date();
sdf.format(d);

変数に日付があることがわかります。

sdf.format(variable_name);

乾杯。


3
OPは、LocalDateインスタンスのコンテンツを特定の形式で印刷したいと考えています。SimpleDateFormatここで彼をどのように助けることができますか?
トム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.