String
日付を表すものを持っています。
String date_s = "2011-01-18 00:00:00.0";
Date
それを に変換して 形式で出力したいと思いますYYYY-MM-DD
。
2011-01-18
どうすればこれを実現できるでしょうか?
さて、以下に取得した回答に基づいて、私が試したことは次のとおりです。
String date_s = " 2011-01-18 00:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd");
System.out.println(dt1.format(date));
しかし、02011-00-1
期待どおりではなく出力されます2011-01-18
。何が間違っているのでしょうか?
ベストアンサー1
使用LocalDateTime#parse()
(またはZonedDateTime#parse()
文字列にタイムゾーン部分が含まれている場合、 をString
特定のパターンで解析して にしますLocalDateTime
。
String oldstring = "2011-01-18 00:00:00.0";
LocalDateTime datetime = LocalDateTime.parse(oldstring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
次にLocalDateTime#format()
(またはZonedDateTime#format()
) を使用して、 a を特定のパターンでLocalDateTime
a にフォーマットします。String
String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(newstring); // 2011-01-18
または、まだJava 8を使用していない場合は、SimpleDateFormat#parse()
String
特定のパターンの を に解析しますDate
。
String oldstring = "2011-01-18 00:00:00.0";
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldstring);
次にSimpleDateFormat#format()
Date
を特定のパターンでフォーマットしますString
。
String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date);
System.out.println(newstring); // 2011-01-18
参照:
更新:この回答が投稿された後に質問に追加した失敗した試みによると、パターンは大文字と小文字が区別されます。java.text.SimpleDateFormat
javadoc個々の部分が何を表しているか。たとえば、M
は月を表し、m
は分を表します。また、年はyyyy
5 桁ではなく4 桁で表されますyyyyy
。上記に投稿したコード スニペットをよく見てください。