2017-04-11 10 views
1

ファイルの最終更新日が日付の範囲と日付の範囲にあるかどうかを示すプログラムを作成しています。範囲内にある場合はコピーしますが、最終更新日の変換時にエラーが発生する

 File src = new File(sourcefile + File.separator + strErrorFile[i]); 
    if(sourcefile.isDirectory()) 
    { 
     ArrayList<Integer> alDateList = date(strList1); 
     int intDateFrom1 = alDateList.get(0); 
     int intDateTo1 = alDateList.get(1); 
     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
     System.out.println("After Format : " + sdf.format(src.lastModified())); 
    try 
    { 
     lastDate = Integer.parseInt(sdf.format(src.lastModified())); //line 362 
     } catch (NumberFormatException e) { 
      e.printStackTrace(); 
    } 
     if(intDateFrom1 <= lastDate && intDateTo1 >= lastDate) 
    { 
      //copy 
    } 
    } 

エラー

java.lang.NumberFormatException: For input string: "09/10/2015" 
at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at org.eclipse.wb.swt.FortryApplication$4.widgetSelected(FortryApplication.java:362) 
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source) 
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source) 
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source) 
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source) 
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source) 
at org.eclipse.wb.swt.FortryApplication.open(FortryApplication.java:56) 
at org.eclipse.wb.swt.FortryApplication.main(FortryApplication.java:610) 
+2

これは有効な整数ではありません - > "09/10/2015"区切り記号 "/"を付けて配列内の各要素を連結し、番号 "091015"にします。これを整数に変換すると、先頭のゼロが削除されることに注意してください。 –

+0

@OusmaneMahyDiawどうすれば変更できますか?申し訳ありません、ただ新しい –

+0

詳細は私の答えを見てください。 –

答えて

1

java.lang.NumberFormatException:入力文字列の場合: "2015年9月10日"

これは有効な整数ではないため、エラーです。あなたが取ることができ

一つのアプローチは、本質的に09102015で私たちを残す必要があり、空の文字列""/のすべてのインスタンスを置き換えるためにString.replaceAll()方法を使用することです。

注記 - これを整数に解析すると、先行ゼロ(0)が削除されます。

例:

String data = sdf.format(src.lastModified()); 

、あなたが行うことができます:あなたはバックステップを取ると、あなたが必要なものを見て、何を持っている必要があります

lastDate = Integer.parseInt(data.replaceAll("/","")); 
+0

しかし、私はどのようにStringBuilderなしでそれを行うことができますか? –

+1

でも可能ですが、forループ内の文字列 "+ ="を連結することはオーバーヘッドです。 StringBuilderは単なる変更可能な文字列なので、問題はありませんし、とにかくStringBuilderを解析用の文字列に戻しています。 –

+1

ループの代わりに 'String#replaceAll'を使用しました。 – MadProgrammer

2

を。

それはあなたの本当の価値のあるものを与えるものではありませんので、あなたは(DateFormatter経由)StringlastModified値を変換する必要はありませんが、あなたが考慮していたときに、日付/時刻

での作業に専念全体のAPIがあり

それが返すことFile#lastModified

のJavaDocの状態を見て持つことから始めるのをしてみましょう:

ミリ秒単位のSIで測定されたファイルが最後に変更された時刻を表すlong値を、ファイルが存在しない場合、またはI/Oエラーが発生した場合は0Lです。

これは実際には有効ですこの値はLocalDateTimeオブジェクトを生成します...

LocalDateTime ldt = LocalDateTime.ofInstant(new Date(src.lastModified()).toInstant(), ZoneId.systemDefault()); 

なぜこのようにしますか? LocalDateTimeが他のLocalDateTimeのオブジェクトと比較することが容易になります方法...

LocalDateTime from = ...; 
    LocalDateTime to = ...; 

    if (ldt.isAfter(from) && ldt.isBefore(to)) { 
     //between... 
    } 

を持っているので、あなたは、2つの日付が等しいかどうかを比較するためにLocalDateTime#equalsを使用することができます。

あなたは「時間」のコンポーネントを必要としない場合、あなたは(時間なし)日付を取得するためにLocalDateTime#toLocalDateを使用することができますベースのオブジェクトが、比較プロセスは基本的に同じ

であるあなたがthis answerを見てすることができます日付/時刻の値が2つの日付/時刻の値の間にあるかどうかを判断するための全体的なロジックが含まれています

関連する問題