web-dev-qa-db-ja.com

LocalDateオブジェクトをMM / dd / yyyyにフォーマットし、フォーマットを持続させる方法

テキストを読み取り、日付をLocalDate変数として保存しています。

LocalDate変数を呼び出したときに、この形式のままになるように、DateTimeFormatterからの書式を保持する方法はありますか?.

編集:parsedDateを文字列として出力するのではなく、2016/09/25の正しい形式で保存したい

私のコード:

public static void main(String[] args) 
{
    LocalDate date = LocalDate.now();
    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
    String text = date.format(formatters);
    LocalDate parsedDate = LocalDate.parse(text, formatters);

    System.out.println("date: " + date); // date: 2016-09-25
    System.out.println("Text format " + text); // Text format 25/09/2016
    System.out.println("parsedDate: " + parsedDate); // parsedDate: 2016-09-25

    // I want the LocalDate parsedDate to be stored as 25/09/2016
}
12
MOZAKATAK

編集:編集を考慮して、次のように、parsedDateをフォーマットされたテキスト文字列に等しく設定します。

parsedDate = text;

LocalDateオブジェクトは、ISO8601形式(yyyy-MM-dd)でのみ印刷できます。オブジェクトを他の形式で印刷するには、独自の例で示したように、オブジェクトをフォーマットして文字列として保存する必要があります。

DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
String text = date.format(formatters);
14
Rebecca Close

短い答え:いいえ。

長い答え:LocalDateは年、月、日を表すオブジェクトであり、これらはオブジェクトに含まれる3つのフィールドです。ロケールはフォーマットが異なるため、フォーマットはありません。また、LocalDateで実行する必要のある操作(日数の加算または減算や時間の加算など)の実行がより困難になります。 )。

文字列表現(toString()によって生成)は、日付の印刷方法に関する国際標準です。別の形式が必要な場合は、選択したDateTimeFormatterを使用する必要があります。

3
Joe C

印刷するときに日付をフォーマットするだけです。

public static void main(String[] args) {
    LocalDate date = LocalDate.now();
    DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
    String text = date.format(formatters);
    LocalDate parsedDate = LocalDate.parse(text, formatters);

    System.out.println("date: " + date);
    System.out.println("Text format " + text);
    System.out.println("parsedDate: " + parsedDate.format(formatters));
}
3
Wojciech Kazior

これは、LocalDateを拡張してtoString()メソッドをオーバーライドできるが、LocalDateクラスは不変であるため、(安全なoop)finalである場合に可能です。つまり、このクラスを使用したい場合、使用できるtoString()メソッドは上記のみです(LocalDateソースからコピー)。

@Override
public String toString() {
    int yearValue = year;
    int monthValue = month;
    int dayValue = day;
    int absYear = Math.abs(yearValue);
    StringBuilder buf = new StringBuilder(10);
    if (absYear < 1000) {
        if (yearValue < 0) {
            buf.append(yearValue - 10000).deleteCharAt(1);
        } else {
            buf.append(yearValue + 10000).deleteCharAt(0);
        }
    } else {
        if (yearValue > 9999) {
            buf.append('+');
        }
        buf.append(yearValue);
    }
    return buf.append(monthValue < 10 ? "-0" : "-")
        .append(monthValue)
        .append(dayValue < 10 ? "-0" : "-")
        .append(dayValue)
        .toString();
}

mustこの動作をオーバーライドする場合、LocalDateをボックス化してカスタムtoStringメソッドを使用できますが、これによりそれが解決する以上の問題を引き起こします!

0