2017-02-06 7 views
1

私は、これは本当に奇妙な問題です。このコード:Java - DateTimeFormatter - ParseException

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd"); 
    Map<LocalDate, Double> temperatur = new TreeMap<>(); 
    for (LocalDate currentDate = LocalDate.parse("2014-jan-01", formatter); currentDate.getYear() < 2015; currentDate = currentDate.plusDays(1)) 
    { 
     String date = currentDate.toString(); 
     int stringIndex = (data.indexOf(date)); 
     String tempString = data.substring((stringIndex + 31), (stringIndex + 35)); 
     if(tempString.contains(";")) 
      tempString = tempString.substring(0, 3); 
     double temp = Double.parseDouble(tempString); 
     temperatur.put(currentDate, temp); 
    } 

は私に例外を与える:

Exception in thread "main" java.time.format.DateTimeParseException: Text '2014-jan-01' could not be parsed at index 5 
    at java.time.format.DateTimeFormatter.parseResolved0(Unknown Source) 
    at java.time.format.DateTimeFormatter.parse(Unknown Source) 
    at java.time.LocalDate.parse(Unknown Source) 
    at main.SMHITest.getValues(SMHITest.java:50) 
    at main.DataCollectionBuilder.addToResult(DataCollectionBuilder.java:46) 
    at main.DataCollectionBuilder.<init>(DataCollectionBuilder.java:25) 
    at main.ClientProgram.main(ClientProgram.java:14) 

あなたが右のためのループで想像としてSMHITest.Java:50ラインがあります。奇妙な部分は、このコードは1台のコンピューターでうまく動作しますが、私の家では動作しません。どちらのマシンもEclipse Mars Jeeを実行しますが、そのマシンではJava 1.8.0_112を実行し、もう一方のマシンではJava 1.8.0_121-b13を実行します。しかし、私はそれが問題になると思いますか?

+0

はい"Jan"の "J"は大文字にする必要がありますか? – Keith

+0

はい、それはそうだったので、そうでした!ありがとうございました! 他のマシンでは必要ではなかったのはまだ変わっていますが。しかし、病気はそこに残す。再度、感謝します。 – Sletten

答えて

0

「2014-jan-01」の日付がyyyy-MMM-ddの形式と一致しないため、エラーがスローされます。これは、日付2014-01-0は「含まれていないとして2014-JAN-01

次に、ここで達成しようとしているかわからない、

String tempString = data.substring((stringIndex + 31), (stringIndex + 35)); 

if(tempString.contains(";")) 

する必要があります。 'または35文字の長さです。

+0

はい、Keithが大文字にする必要があると指摘したのと同じです。これは、他のマシンでexakt same(私は実際に修正した後に二重チェックした)コードなので、まだ変わっています。でもありがとう! "data"文字列はjsonファイルからのデータの束で満たされており、ここでは完全にコンテキスト外です。おそらく、その部分を切り捨てておくべきです。 – Sletten

+0

LocalDateはjava8で導入されており、すべてのマシンで同じように動作するはずです。 –

+0

ええ、おそらくあなたの権利。私はちょうど本当に何が混乱しています。しかし、私は病気は、それが動作している今に移動する必要がありますね。しかし、それは私をバグ。 – Sletten

0

次のように新しいjava.time -APIが使用大文字と小文字を区別しない方法の「2014-JAN-01」のようなそのような文字列解析にのみ(かつ厄介な)方法:

String input = "2014-jan-01"; 
DateTimeFormatter dtf = 
    new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("uuuu-MMM-dd") 
    .toFormatter().withLocale(Locale.ENGLISH); 
LocalDate date = dtf.parse(input, LocalDate::from); 
System.out.println(date); // 2014-01-01 
関連する問題