質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

10897閲覧

java.time.format.DateTimeParseException の発生

n000n00

総合スコア25

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/11/23 16:31

###前提・実現したいこと
Java参考書のSampleソースを実行したところ
java.time.format.DateTimeParseException が発生し、原因が掴めません

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

public class Main2_4 {
public static void main(String[] args) {

// 文字列からLocalDateを生成 DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/mm/dd"); LocalDate d = LocalDate.parse("2016/08/21", f); // 1000日後を計算する d = d.plusDays(1000); String str = d.format(f); System.out.println("1000日後は" + str); // 現在日付と比較 LocalDate now = LocalDate.now(); if (now.isAfter(d)) { System.out.println("nowはdより新しい"); } }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/11/23 16:38

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy/MM/dd");
guest

回答4

0

mmは分なのでLocalDateでは取り扱いできない、または年月日が揃ってないから例外になるのかもしれないです。MMを使いましょうね。

ただ、日付にできないだけなので年月日が全部揃っているyyyy/mm/MM/ddにするとどうなるかが気になりますね。

投稿2016/11/23 16:43

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/11/23 16:45

そうなるとddに当たる文字列がないのでこれも例外になるかと。
yona

2016/11/24 02:10

ddが入っているから日の指定子はありますよ。 LocaleDateに与えるフォーマットに年(yyyy)/月(MM)/日(dd)の指定子が含まれるかどうかで例外が発生するのか、年月日以外の指定子が入っているから例外なのかを試して見て欲しいです。
swordone

2016/11/24 02:12

いえ、parseメソッドに渡している"2016/08/21"が、2016がyyyyに、08がmmに、21がMMに解釈され、ddに対応する文字列が存在しないのです。だから間違いなく例外になりますよ。
guest

0

月のフォーマットはMMです。

java

1DateTimeFormatter.ofPattern("yyyy/MM/dd");

投稿2016/11/23 16:40

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ぱっと見たところ、yyyy/mm/dduuuu/MM/ddじゃないかなぁ。mmだと分になるような。

投稿2016/11/23 16:34

編集2016/11/23 16:36
umed0025

総合スコア851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/11/23 16:37

あー、そっちだ。
n000n00

2016/11/23 16:42

ありがとうございます。 解決しました。助かりました。
guest

0

参考

DateTimeFormatterで年を表現するのはuです。yyyyをuuuuに書き換えてください。

投稿2016/11/23 16:34

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

n000n00

2016/11/23 16:38

早速の回答、ありがとうございます。 DateTimeFormatter f = DateTimeFormatter.ofPattern("uuuu/mm/dd"); に書き換えましたが、同じExceptionが発生します。 Exception in thread "main" java.time.format.DateTimeParseException: Text '2016/08/21' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {Year=2016, DayOfMonth=21, MinuteOfHour=8},ISO of type java.time.format.Parsed
n000n00

2016/11/23 16:44

ご回答、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問