패스트캠퍼스 백엔드 부트캠프 3기/JAVA

[JAVA] 날짜와 시간 객체, 형식화 클래스

hail2y 2025. 1. 20. 12:14
Date Calendar java.time 패키지

Calendar 추상 클래스

Calendar cal = new GregorianCalendar();  // 구체적으로 명시
Calendar cal = Calendar.getInstance();   // 팩토리 메서드를 사용해 추상화

 

new를 사용해 구체적인 클래스를 명시하는 것보다 현재 시간을 기준으로 인스턴스를 반환하게 하는 것이 유지보수 관점에서 훨씬 좋은 코드이다.

  • 날짜와 시간을 같이 다룬다. 
  • month는 0부터 시작한다.
  • 요일 또한 int로 반환하기 때문에 따로 문자열 처리를 해 주어야 한다.
  • set() 하기 전에 clear()로 필드 초기화를 해 주는 것이 좋다. 초기화 하지 않으면 ms 차이로 의도한 대로 결과가 나오지 않을 수 있다. 
  • add(): 특정 필드의 값 증가/감소 - 다른 필드에 영향 O (ex. 8/31 + 1일 = 9/1)
  • roll() : 특정 필드의 값 증가/감소 - 다른 필드에 영향 X (ex. 8/31 + 1일 = 8/1)

달력을 출력하는 코드를 작성할 때는 크게 두 가지를 고려해야 한다. 

  1. 말일 구하기 
    - 달에 따라 말일이 28, 29, 30, 31로 다양하기 때문에 말일 구하는 것은 다음달 1일에서 -1일 하는 것으로 바꾸어생각할 수 있다. 
  2. 시작 요일 구하기

형식화 클래스

  • DecimalFormat
  • SimpleDateFormat

날짜와 숫자 ↔ 문자열로 형식을 자유로이 바꿀 수도 있다.

  • 문자열 → 날짜와 시간(Date): parse
  • 날짜와 시간(Date) → 문자열: format
DecimalFormat df = new DecimalFormat(패턴);
Number n = df.parse("문자열");
ex. int num = n.intValue();

parseInt, parseDouble에서는 콤마를 인식할 수 없기 때문에
DecimalFormat을 사용하면 문자열에서 숫자를 추출할 수 있다.

String s = df.format(숫자);

 

SimpleDateFormat을 사용하면 날짜와 시간을 다양한 형식으로 나타낼 수 있다.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse("1919-03-01"); // 데이터 형식과 맞는 문자열 들어와야 함

String s = sdf.format(new Date()); // 현재 시간과 날짜 기준

 

+ https://hail2y.tistory.com/124

 

[JAVA] 천 단위마다 쉼표로 구분하기 - DecimalFormat, NumberFormat

두 클래스 모두 java.text 패키지에 속하여 숫자를 문자열로 또는 문자열을 숫자로 변환한다. 두 클래스 모두 패턴을 이용하여 특정 패턴 때문에 형 변환이 쉽지 않을 때 사용할 수 있다. 예를 들어

hail2y.tistory.com