2012-01-07 9 views
7

は私がJavaの日付フォーマット変換 - 取得間違っ月

String dateStr = "2011-12-15"; 
    String fromFormat = "yyyy-mm-dd"; 
    String toFormat = "dd MMMM yyyy"; 

    try { 
     DateFormat fromFormatter = new SimpleDateFormat(fromFormat); 
     Date date = (Date) fromFormatter.parse(dateStr); 

     DateFormat toformatter = new SimpleDateFormat(toFormat); 
     String result = toformatter.format(date); 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

入力日は2011年12月15日である...私が間違っているつもりですどこかわからない、Javaで日付を変換する際に問題があり、私は結果を「2011年12月15日」と期待していますが、「2011年1月15日」となります

どこが間違っていますか?

答えて

21

fromFormatは、月を使用する必要がある分を使用します。

String fromFormat = "yyyy-MM-dd"; 
+0

私はsoooooダムです:(ありがとう.... – amithgc

+0

probsありませんでした:) – sje397

+0

s、あなたは、あなたです:p – fge

2

ルックとmの内容を見てください。あなたが考えるように数ヶ月ではなく数分です。

1

mSimpleDateFormatは、分を表し、Mは、月を表す。したがって、最初の形式はyyyy-MM-ddにする必要があります。形式から

+0

私が好きなことの一つは、質問がとても素早く答えられるということです。私が答えを入力した1分の間に3つの新しい答え、素晴らしい! – ffriend

1
String fromFormat = "yyyy-MM-dd"; 
1

は次のようになります。

String fromFormat = "yyyy-MM-dd" 
1

java.time

受け入れ回答(月の大文字MM)正しいですが、今より良いアプローチがあります。面倒な古いdate-timeクラスは、現在、java.timeクラスに取って代わられています。

入力文字列は標準ISO 8601の形式です。したがって、解析するための書式設定パターンを指定する必要はありません。

LocalDate ld = LocalDate.parse("2011-12-15"); // Parses standard ISO 8601 format by default. 
Locale l = new Locale("en" , "IN") ; // English in India. 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG) 
             .withLocale(l); 
String output = ld.format(f); 

コンソールにダンプします。

System.out.println("ld.toString(): " + ld); 
System.out.println("output: " + output); 

ld.toString():2011-12-15

出力:2011年12月15日

live code in IdeOne.comを参照してください。 java.timeについて


java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.DateCalendar、& SimpleDateFormatなど、面倒な古いlegacy日時クラスに取って代わります。

maintenance modeにあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。

詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。

ここで、java.timeクラスを取得するには?

  • Java SE 8SE 9以降
    • 内蔵しています。
    • バンドルされた実装の標準Java APIの一部です。
    • Java 9には、いくつかのマイナーな機能と修正が加えられています。
  • Java SE 6SE 7
    • java.time機能の多くはThreeTen-BackportのJava 6 & 7に戻って、移植されます。
  • Android
      ThreeTenABP
    • プロジェクトは、具体的にはAndroid用(上記)ThreeTen-バックポートを適応させます。
    • How to use ThreeTenABP…を参照してください。

ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、IntervalYearWeekYearQuartermoreなどの便利なクラスがあります。

関連する問題