2017-03-24 15 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

방금 ​​반환 문이 String임을 알았지 만 내 메서드는 Date를 반환합니다. 하지만 어떻게하면 내 메서드가 formattedDate를 반환하도록 고칠 수 있습니까? –

+1

'java.util.Date' 타입의 객체를 얻고 싶다면'expiredDate.getTime());'Simple을 반환하십시오. 여기에서 포맷 할 필요가 없습니다.또는 문자열을 원하면 형식을 지정하고 메서드의 반환 유형을 변경합니다. –

+0

메서드의 반환 유형을 문자열로 변경 하시겠습니까? –

답변

1

TL입니다 박사

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) ; 

표준 ISO 8601 형식 YYYY-MM-DD에서 그 값을 나타내는 String을 생성하려면 toString를 호출합니다. 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

작동합니다. 고맙습니다. –