Joda-Time
소개
java.util.Calendar 와 java.util.DateTime 이 사용하기 불편하고 버그가 많고 확장도 어려움
Joda-Time 은 JDK 의 Calendar와 Date 를 대체하는 library.
Maven 연계
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.9</version> </dependency>
java Calendar와 비교
좌측이 Joda, 우측이 java의 Calendar
Instance 생성
DateTime dateTime = new DateTime(2000, 1, 1, 0, 0, 0, 0);
Calendar calendar = Calendar.getInstance(); calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0);
Adding 90 days to an instant and printing the result, the JDK way
DateTime dateTime = new DateTime(2014, 1, 1, 0, 0, 0, 0); System.out.println(dateTime.plusDays(90).toString("yyyy-MM-dd E HH:mm:ss.SSS"));
Calendar calendar = Calendar.getInstance(); calendar.set(2014, Calendar.JANUARY, 1, 0, 0, 0); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd E HH:mm:ss.SSS"); calendar.add(Calendar.DAY_OF_MONTH, 90); System.out.println(sdf.format(calendar.getTime()));
Joda result를 JDK Calendar object 에 전달
toDate() 메소드 활용
Calendar calendar = Calendar.getInstance(); DateTime dateTime = new DateTime(2014, 1, 1, 0, 0, 0, 0); dateTime = dateTime.plusDays(45).plusMonths(1).dayOfWeek().withMaximumValue(); System.out.println(dateTime.toString("yyyy-MM-dd E HH:mm:ss.SSS"); calendar.setTime(dateTime.toDate());
사용
현재 시간
DateTime dt = new DateTime();
String format 에서 DateTime 생성
- pattern format 은 http://www.joda.org/joda-time/key_format.html 참고
DateTimeFormatter fmt = org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd hh:mm:ss"); DateTime dt = DateTime.parse("2014-02-03 11:22:33", fmt);
DateTimeFormatter 사용
- http://stackoverflow.com/questions/20331163/how-to-format-joda-time-datetime-to-only-mm-dd-yyyy
- http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html
String dateTime = "2013-11-15 08:12:34"; DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); // Parsing the date DateTime jodatime = dtf.parseDateTime(dateTime); // Format for output DateTimeFormatter dtfOut = DateTimeFormat.forPattern("yyyy-MM-dd"); // Printing the date System.out.println(dtfOut.print(jodatime));
java.util.Date 로 DateTime 생성
http://stackoverflow.com/questions/5042587/convert-from-java-util-date-to-jodatime
java.util.Date date = ... DateTime dateTime = new DateTime(date);
java.sql.Timestamp type 으로 변환
DateTime dateTime = new DateTime(); Timestamp timeStamp = new Timestamp(dateTime.getMillis());
Spring 3.2.x 의 @DateTimeFormat
Spring 3.2 부터는 Joda 가 없어도 annotation 으로 DateTimeFormat 사용가능. classpath에 joda 없으면 JDK 의 SimpleDateFormat 을 사용하고 있으면 joda 를 사용함. annotation 을 사용하려면 <mvc:annotation-driven /> 가 설정되어 있어야 함
http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-config-enable
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss") private Date date;
//iso=DateTimeFormat.ISO.DATE_TIME format yyyy-MM-dd'T'HH:mm:ss.SSSZ, e.g. 2000-10-31 01:30:00.000-05:00. //@Ref http://docs.spring.io/spring/docs/3.2.6.RELEASE/javadoc-api/org/springframework/format/annotation/DateTimeFormat.ISO.html @DateTimeFormat(iso=DateTimeFormat.ISO.DATE_TIME) private Date date;