여기에 현대적인 대답이 있습니다. 다른 답변은 2013 년에 작성되었을 때 훌륭한 답변이었습니다. 그 후 1 년 후 현대 날짜와 시간 API는 이전 클래스 Date
, SimpleDateFormat
및 친구들을 대체했습니다. IMHO 이제 새 수업을 사용해야합니다. 그들은 훨씬 더 프로그래머에게 친숙합니다.
LocalDateTime newDate = null;
String dateTime = "2013-03-18 08:30";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm", Locale.ENGLISH);
try {
newDate = LocalDateTime.parse(dateTime, dtf);
} catch (DateTimeParseException e) {
throw new InvalidInputException("Invalid date input.");
}
클래스 이름을 제외하면 이전 코드와 크게 다르지 않습니다. 다른 예가 있으면 차이가있을 것이며, 일반적으로 현대 수업은 코드를 명확하게하고 오류를 줄이는 기회를 제공합니다.
차이의 한 작은 데모를 들어, 당신이 그것에 대문자 YYYY
로했다 형식 패턴 문자열을 해보자 :
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm", Locale.ENGLISH);
이제 코드는 java.time.format.DateTimeParseException: Text '2013-03-18 08:30' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {MonthOfYear=3, DayOfMonth=18, WeekBasedYear[WeekFields[SUNDAY,1]]=2013},ISO resolved to 08:30 of type java.time.format.Parsed
가 발생합니다. 그것은 길다, 나는 알고있다. 주목해야 할 점은 그것이 언급 한 분야 중 일년이 없다는 것입니다. 오직 WeekBasedYear 만 있습니다. 이건 같은게 아니야; 그리고 대문자 인 Y
은 주 기준 연도 (주 번호가 usseful 인 경우)이므로 올해 정확하게 소문자 인 y
을 사용해야하기 때문일 수도 있습니다. 나는이 행동을 오래된 수업보다 조금 더 도움이된다고 생각합니다. 그들은 잘못된 결과를주었습니다. 모든 것이 위선이라고 생각하고, 어둠에 대해 무엇이 잘못되었는지를 완전히 알려주었습니다.
다음으로 데이터베이스에 날짜 - 시간을 저장하고 싶습니다. 예전에는 적절한 java.sql
유형으로 변환했습니다. 더 이상 필요하지 않습니다. 나는 당신이 할 수있는 JDBC 4.2 드라이버를 믿는다 :
ps.setObject(3, newDate);
나는 이것을 데이터베이스로 테스트하지 않았다. setDate()
대신 setObject()
을 사용합니다.
업데이트의 경우 'java.sql.Date'는 날짜 전용이며 SQL의 날짜 데이터 유형을 나타냅니다. 문서에서 : "SQL DATE의 정의에 따라 java.sql.Date 인스턴스로 랩핑 된 밀리 초 값은 특정 표준 시간대에서시, 분, 초 및 밀리 초를 0으로 설정하여 '정규화'해야합니다. 인스턴스가 연결되어 있습니다. " –