テキストを読み取り、日付を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
}
編集:編集を考慮して、次のように、parsedDateをフォーマットされたテキスト文字列に等しく設定します。
parsedDate = text;
LocalDateオブジェクトは、ISO8601形式(yyyy-MM-dd)でのみ印刷できます。オブジェクトを他の形式で印刷するには、独自の例で示したように、オブジェクトをフォーマットして文字列として保存する必要があります。
DateTimeFormatter formatters = DateTimeFormatter.ofPattern("d/MM/uuuu");
String text = date.format(formatters);
短い答え:いいえ。
長い答え:LocalDate
は年、月、日を表すオブジェクトであり、これらはオブジェクトに含まれる3つのフィールドです。ロケールはフォーマットが異なるため、フォーマットはありません。また、LocalDate
で実行する必要のある操作(日数の加算または減算や時間の加算など)の実行がより困難になります。 )。
文字列表現(toString()
によって生成)は、日付の印刷方法に関する国際標準です。別の形式が必要な場合は、選択したDateTimeFormatter
を使用する必要があります。
印刷するときに日付をフォーマットするだけです。
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));
}
これは、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
メソッドを使用できますが、これによりそれが解決する以上の問題を引き起こします!