-
[Java] 날짜와 시간Language/Java 2024. 7. 19. 19:24
참고 도서 : Java의 정석 기초편 (남궁 성)
- JDK1.0부터 제공되어 온 Date를 사용했었으나, 빈약하여 JDK1.1부터 Calendar 제공하여 20년 동안 사용해왔음 (현재 deprecated, 그러나 이해할 필요가 있다)
- JDK1.8부터 java.time패키지로 기존의 단점을 개선한 새로운 클래스들이 추가 되었다.Calendar class
- 추상 클래스
- 객체 직접 생성 불가, 메서드를 통해 완전히 구현된 클래스의 인스턴스를 얻어야 한다.
Calendar cal = Calendar.getInstance();
- getInstance() : 태국 제외하곤 GregorianCalendar의 인스턴스를 반환.
- 태국에서는 BuddhistCalendar의 인스턴스를 반환
- 직접 생성하지 않고 메서드를 통하는 방식의 이유 : 최소한의 변경
- static인 이유
- 메서드 내의 코드에서 인스턴스 변수를 사용하거나 인스턴스 메서드를 호출하지 않기 때문
- Calendar가 추상클래스라서 인스턴스를 생성할 수 없으므로 인스턴스 메서드면 이용할 수가 없게 됨
Calendar method와 변수
Calendar today = Calendar.getInstance();
get
today.get(Calendar.변수);
변수 설명 YEAR 현재 연도 MONTH 현재 월 WEEK_OF_YEAR 올해 몇째주인지 WEEK_OF_MONTH 달의 몇째주인지 DATE / DAY_OF_MONTH 달의 몇일인지 DAY_OF_YEAR 연의 몇일인지 AM_PM 오전(0)/오후(1) HOUR 0~11시 중 몇시 HOUR_OF_DAY 0~23시 중 몇시 MINUTE 분 SECOND 초 MILLISECOND 0~999초(ms) today.getActualMaximum(Calendar.DATE)
이번 달의 마지막 일 수를 반환
set
void set(int year, int month, int date, int hourOfDay, int minute, int second
Calendar date1 = Calendar.getInstance(); date1.set(2024, 9, 25);
- month는 0부터 시작하는 것 주의
add & roll
add(int field, int amount)
: (다른 필드에 영향O) 지정한 필드의 값을 원하는 만큼 증가roll(int field, int amount)
: (다른 필드에 영향X) 지정한 필드의 값을 원하는 만큼 증가- 예외 : Calendar.DATE(일) 필드가 end of month 일 때, roll 메서드를 이용해 MONTH를 변경하면 DATE에 영향을 준다.
Date <-> Calendar
- Calendar -> Date
Calendar cal = Calendar.getInstance(); //... Date d = new Date(cal.getTimeInMillis());
- Date -> Calendar
Date d = new Date(); //... Calendar cal = Calendar.getInstance(); cal.setTime(d);
SimpleDateFormat
날짜 데이터를 원하는 형태로 출력할 수 있다.
Date today = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String result = df.format(today);
parse(String source)
문자열 source를 Date 인스턴스로 변환
DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일"); DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd"); try{ // string -> date Date d = df.parse("2019년 11월 23일"); // date -> string System.out.println(df2.format(d)); }catch(Exception e){}
날짜 입력 예제
public class Ex10_10 { public static void main(String[] args) { String pattern = "yyyy/MM/dd"; DateFormat df = new SimpleDateFormat(pattern); Scanner s = new Scanner(System.in); java.util.Date inDate = null; System.out.println("날짜를 " + pattern + "의 형태로 입력해주세요.(2019/12/31)"); while (s.hasNextLine()) { try { inDate = df.parse(s.nextLine()); break; } catch (Exception e) { System.out.println("날짜를 " + pattern + "의 형태로 입력해주세요."); } } Calendar cal = Calendar.getInstance(); cal.setTime(inDate); Calendar today = Calendar.getInstance(); long day = (cal.getTimeInMillis() - today.getTimeInMillis()) / (60 * 60 * 1000); System.out.println("입력하신 날짜는 현재와 " + day + "시간 차이가 있습니다."); } }
'Language > Java' 카테고리의 다른 글
[IntelliJ]IDEA에서 java 버전 변경 (0) 2024.10.15 [우테코 프리코스] 임하는 자세 (0) 2024.10.15 [Java] Stack vs Queue (1) 2024.07.24 [Java] ArrayList vs LinkedList (0) 2024.07.24 [Java] Collection framework (3) 2024.07.22