년, 월, 일에서 자바 날짜 객체 생성


99
int day = Integer.parseInt(request.getParameter("day"));  // 25
int month = Integer.parseInt(request.getParameter("month")); // 12
int year = Integer.parseInt(request.getParameter("year")); // 1988

System.out.println(year);

Calendar c = Calendar.getInstance();
c.set(year, month, day, 0, 0);  

b.setDob(c.getTime());

System.out.println(b.getDob());  

출력은 다음과 같습니다.

1988 년
1 월 25 일 수요일 00:00:08 IST 1989

나는 통과하고 25 12 1988있지만 25 Jan 1989. 왜?


1
코드에서 b는 무엇입니까?
MysteryGuy

답변:


113

달력에서 월은 0부터 시작합니다. 따라서 12는 12 월 + 1 개월로 해석됩니다. 사용하다

c.set(year, month - 1, day, 0, 0);  

5
IBM API 디자이너, JavaScript API 디자이너. 그 외에는 아무도 없을 것입니다. Calendar는 이제 올바른 작업을 수행하는 Java 8 java.time API에 의해 폐기되었습니다.
JB Nizet

67

이것이 Java 8 이전에 제가 가장 좋아하는 방법입니다.

Date date = new GregorianCalendar(year, month - 1, day).getTime();

나는 이것이 다음보다 더 깨끗한 접근 방식이라고 말하고 싶습니다.

calendar.set(year, month - 1, day, 0, 0);

4
월은 Calendar상수를 사용하여 지정할 수 있습니다 . Calendar.FEBRUARY.
Geekarist

1
Java 7에서 월은 0부터 번호가 매겨졌습니다. 문제를 방지하려면 상수를 사용하십시오.
jediz

확인해야 할 점-두 사람은 호출 할 때 다른 결과를 렌더링 getTime()합니다. 생성자의 설정 정보는 후자의 접근 방식이 현재 시간을 사용하는 시작 시간을 제공합니다. 문서를 참조하십시오 . 따라서 첫 번째는 사람들이 실제로하려는 일을 가정하는 더 나은 접근 방식 일 것입니다.
funct7

27

java.time

java.timeJava 8에 내장 된 프레임 워크 사용

int year = 2015;
int month = 12;
int day = 22;
LocalDate.of(year, month, day); //2015-12-22
LocalDate.parse("2015-12-22"); //2015-12-22
//with custom formatter 
DateTimeFormatter.ofPattern formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate.parse("22-12-2015", formatter); //2015-12-22

시간 (시, 분, 초)에 대한 정보도 필요하면에서 LocalDate로 변환을 사용하십시오.LocalDateTime

LocalDate.parse("2015-12-22").atStartOfDay() //2015-12-22T00:00

좋은 답변이지만 알고있는 경우 시간대를 지정하십시오. A LocalDate에는 시간대가 없으므로 타임 라인에서 정확한 순간을 나타내지 않습니다. 컨텍스트가 시간대를 나타내는 경우이를 적용하여 ZonedDateTime객체 를 가져옵니다 . LocalDate.parse("2015-12-22").atStartOfDay( ZoneId.of( "America/Montreal" ) )
Basil Bourque

9

Java의 캘린더 표현은 최고가 아니며 Java 8을 위해 작업하고 있습니다. Joda Time 또는 다른 유사한 라이브러리 를 사용하는 것이 좋습니다 .

다음은 Joda Time 라이브러리에서 LocalDate를 사용하는 간단한 예입니다.

LocalDate localDate = new LocalDate(year, month, day);
Date date = localDate.toDate();

여기 에서 빠른 시작 자습서를 따를 수 있습니다.


6

JavaDoc 참조 :

month-MONTH 달력 필드를 설정하는 데 사용되는 값. 월 값은 0부터 시작합니다. 예 : 1 월의 경우 0.

따라서 설정 한 달은 다음 해의 첫 번째 달입니다.


0

날짜, 타임 스탬프 및 기간으로 작업 할 때 생활을 편하게 만드십시오. HalDateTime 사용

http://sourceforge.net/projects/haldatetime/?source=directory

예를 들어 다음과 같이 입력을 구문 분석하는 데 사용할 수 있습니다.

HalDateTime mydate = HalDateTime.valueOf( "25.12.1988" );
System.out.println( mydate );   // will print in ISO format: 1988-12-25

구문 분석 및 인쇄를위한 패턴을 지정할 수도 있습니다.


3
자신의 도서관 수업을 홍보하는 것 같습니까? 아마도 허용되지만 .NET의 주요 개발자라면 언급하면 ​​더 좋아 보일 것입니다 HalDateTime.
Ole VV

나는 반대 투표하지 않았습니다. 그러나 날짜와 함께 인생은 결코 쉽지 않습니다. 당신의 도서관은 그 사실을 바꾸지 않을 것입니다.
kiltek

왜 반대표를해야합니까? 내 라이브러리는 2013 년에 작성되었습니다. 모든 기능은 JSR 310에 지정된대로 java.time에서 사용할 수 있습니다. 개인적으로 가장 잘 설계된 API 중 하나입니다. 나는 그것을 사용하는 것이 좋습니다.
Hajo Lemcke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.