2017-03-24 30 views
0

SimpleDateFormatとCalendarオブジェクトを使用して日付を変更しようとしています。その後、変更された日付をデータベースに書き込みます。問題は、私の方法はコンパイルされないということです。それは言う:互換性のない型文字列は、日付に変換することはできません。私は何を取りこぼしたか? これは私の方法Java:日付操作

public Date expiredItem() { 

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    Calendar expiredDate = Calendar.getInstance(); 
    expiredDate.add(Calendar.DATE, Integer.parseInt(timeFld.getText())); 
    //timeFld is JTextField.getText() casted into int 

    // The confusing thing is, below Dialog works as i expected but not on my 
    // method return. 
    JOptionPane.showMessageDialog(null, "Expiration Date: " +  
    dateFormat.format(expiredDate.getTime())); 
    return dateFormat.format(expiredDate.getTime()); //Erroneous code 
} 
+0

私はreturn文がStringであることを知りましたが、私のメソッドはDateを返します。しかし、私のメソッドがformattedDateを返すようにこれを修正するにはどうすればよいですか? –

+1

'java.util.Date'型のオブジェクトを取得したい場合は、' expiredDate.getTime()); 'Simpleを返します。ここでフォーマットする必要はありません。または、文字列が必要な場合は、それをフォーマットし、メソッドの戻り値の型を変更します。 –

+0

メソッドの戻り値の型を文字列に変更しますか? –

答えて

1

TLであり、DR

myPreparedStatement.setObject( 
    … , 
    LocalDate.now(ZoneId.of("America/Montreal")) 
      .plusDays(…) 
) 

詳細は

質問は明らかではないが、あなたは日をいくつか追加し、現在の日付を取得しようとしているようですね(テキストとして入力)して「有効期限」の日付を決定し、それをテキストとして表示します。

現在、古くなっている厄介な古い日時クラスを、java.timeクラスに置き換えて使用しています。

現在の日付を取得するには、タイムゾーンが必要です。任意の瞬間について、日付はゾーンによって地球の周りで変化する。

ZoneId z = ZoneId.of("America/Montreal"); 

JVMの現在のデフォルトタイムゾーンを使用できます。しかし、デフォルトは、JVM内の任意のアプリケーションの任意のスレッド内の任意のコードによっていつでも変更することができます。だから重要な場合は、ユーザーに希望/期待ゾーンを尋ねる。

ZoneId z = ZoneId.systemDefault() ; 

LocalDateを使用し、時刻なしとタイムゾーンのない日付のみの値を表します。

LocalDate today = LocalDate.now(z); 

longに日数のテキストを解析します。

String input = timeFld.getText() ; 
long days = Long.parseLong(input); 

todayに日を追加します。

LocalDate expiration = today.plusDays(days) ; 

単にtoStringを呼び出し、標準ISO 8601形式YYYY-MM-DDにその値を表す文字列を生成します。 2017年1月23日

あなたのJDBCドライバは、JDBC 4.2以降に準拠している場合

String output = expiration.toString(); 

、あなたは PreparedStatement::setObjectResultSet::getObject方法を経由して、データベースでこの LocalDateを交換することができます。

古いドライバの場合は、古いクラスに新しい変換方法を使用してjava.sql.Dateクラスに変換してください。

java.sql.Date sqlDate = java.sql.Date.valueOf(expiration); 

LocalDate expiration = sqlDate.toLocalDate(); 

ヒント:入力を収集して結果を表示するユーザーインターフェイス作業からビジネスロジックを実行する(期限を計算する)コードを区切ります。

+0

それは動作します、ありがとう –