ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    1. Calendar -> Date
      Calendar cal = Calendar.getInstance();
      //...
      Date d = new Date(cal.getTimeInMillis());
    2. 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
Designed by Tistory.