날짜의 유효 검사와 날짜 증가 구현...


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]

글쓴이 :이채욱 1999년 4월 01일 18:53:26

In Reply to: 간단한 사용 예입니다. posted by 윤경구 on 1999년 4월 01일 09:18:37:


dateT 라는 텍스트 필드에서 날짜 형식이 1999-02-12 와 같이
들어 있는데 먼저 이 값이 유효한 날짜 인지를 확인하기 위하여
각각을 년,월,일로 파싱하여
SimpleDateFormat 클래스를 사용하여 객체를 생성하게 되었읍니다.
그런데 SimpleDateFormat은 만약 1999-02-29 이란 값을
주면 그 값이 윤년일 경우를 제외하고는 부적당한 값인데,
그냥 1999-03-01로 자동으로 생성을 하더군요...
즉 1999-03-43 과 같이 주어도 1999-04-12로 바꾼다는 얘기죠...
월의 경우도 마찬가지 겠죠..


그래서 날짜가 유효한 값인지를 검사하기 위해서 좀 변칙적인
방법을 사용하였죠...
즉,위와 같이 자동으로 생성된 월,일은 우리가 처음에 준
텍스트 박스의 월,일과 일치하지 않으니깐
유효하지 않은 값이 되는 거죠...


물론 DateFormat 클래스의 parse() 메소들를 사용하면
된다고 하는데 인자로 들어가는 String의 형식을 모르겠더군요..
여러가지("1999-12-09","Mar 23, 1999" )등을 사용해 보았지만
ParseException 이 발생하더군요...


좋은 방법을 알고 계신 분은 좀 알려 주십시오...



그리고 버튼을 누르면 날짜가 하루씩 증가하거나
감소하게 하기 위해 Calendar 클래스의 roll(int field,int amount)
메소드를 사용하였는데 증가 버튼을 누르면
일(日)은 증가하는데 동시에 달(月)이 증가하고
감소 버튼을 누르면
일(日)은 감소하는데 동시에 달(月)이 증가하더군요...


제가 잘못사용한 것인지 아니면 다른 좋은 메소드가 있는지
좀 알려 주세요...


아래에 소스가 있읍니다.

:
:
String text = dateT.getText();

int start = text.indexOf('-');
int last = text.lastIndexOf('-');

String year = text.substring(0,start);
String month = text.substring(start+1,text.indexOf('-',start+1));
String day = text.substring(last+1);


SimpleDateFormat formatter = new SimpleDateFormat ("yyyy.MM.dd");
ParsePosition pos = new ParsePosition(0);
java.util.Date current = formatter.parse(year+"."+month+"."+day, pos);

if(Integer.parseInt(month) == current.getMonth()+1)
{
Calendar gc = Calendar.getInstance();
gc.set(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day));
gc.roll(Calendar.DAY_OF_YEAR,1);

String a;

a = Integer.toString(gc.get(Calendar.YEAR))+"-";

if (gc.get(Calendar.MONTH) < 9)
a = a + "0" + Integer.toString(gc.get(Calendar.MONTH)+1)+"-";
else
a = a + Integer.toString(gc.get(Calendar.MONTH)+1)+"-";

if (gc.get(Calendar.DAY_OF_MONTH) < 10)
a = a + "0" + Integer.toString(gc.get(Calendar.DAY_OF_MONTH));
else
a = a + Integer.toString(gc.get(Calendar.DAY_OF_MONTH));

dateT.setText(a);

//System.out.println("Sucess 1");

:
:

앗! 이글을 올리려고 써 놓았는데 게시판에 와 보니 윤경구님께서
벌써 답장을 써 주셨네요...
SimpleDateFormat에 대한 조언 정말 감사드립니다.
저도 나름대로 반 나절이나 고민하여 찾았거든요...


염치가 없지만 또 하나의 문제를 올려 놓습니다...
죄송...
아시는 분 좀 해결해 주십시오...
저도 나름대로 찾아 보고 찾으면 게시판에 올리겠읍니다..
그럼 좋은 하루 되세요....


다음 글들:



이어서 글올리기(답하기)

이름:
E-Mail:
제목:
내용:
HTML 태그 포함 여부: HTML 문서일 경우 체크
관련 URL(선택):
URL 제목(선택):
관련 이미지 URL:


[ 다음 글들 ] [ 이어서 글올리기(답하기) ] [ 자바 묻고 답하기 ]