java/study

java.time(자바 시간 관련 패키지와 클래스)

dalae6763 2023. 4. 2. 17:45

package:java.util

class:Calender class

Calender class

  1. statinc Calendar getlnstance()
    1. Calendar 객체생성
      1. 달력체계가 다른 국가가 있으므로
      1. locale 정보를 가지고 결정
      1. (java.util.Locale)
      1. get(필드 상수)→날짜,시간조회
      1. set(필드 상수,값)→날짜 시간 변경
      1. add(필드 상수,값)→날짜 시간 가감(필드에의 값이 넘어서면 자동으로 월년도가 변경)
      1. roll(필드 상수,값)→날짜,시간을 가감(필드에 해당하는 항목이 계속반복)
      1. add(int feeld,int value)
      1. roll(int field ,boolean up)
        package eaxm01;
        
        import java.util.Calendar;
        import static java.util.Calendar.*;
        // Calendar.year->year제거해서 쓸수 있다?
        public class ex02 {
            public static void main(String[] args) {
                //Calendar cal = new Calendar(); 이런식으로는 만들수 없다
                Calendar cal = Calendar.getInstance();
                System.out.println(cal);
                int year = cal.get(Calendar.YEAR);
                int month = cal.get(Calendar.MONTH);
                int day = cal.get(Calendar.DAY_OF_YEAR);
        				//java.util.Calendar;
                
                int hours = cal.get(HOUR);
                int min = cal.get(MINUTE);
                int sec = cal.get(SECOND);
        				//static java.util.Calendar;
        
        
        				System.out.printf("year=%d,month=%d,day=%d,h=%d,m=%d,s=%d%n",year,month,day,hours,min,sec);
            }
        }
        📤
        year=2023,month=3,day=92,h=2,m=34,s=56
        cal.set(2023,10,1,12,13,40);//원하는 시간대로 설정할수 있다
        📤
        year=2023,month=10,day=305,h=0,m=13,s=40
        //cal.add(DAY_OF_MONTH,365);//양수 ->날짜,시간 추가
        //cal.add(DAY_OF_MONTH,-365);//음수 ->날짜,시간 추가
        package eaxm01;
        
        import java.time.Year;
        import java.util.Calendar;
        
        public class ex03 {
            public static void main(String[] args) {
                Calendar cal = Calendar.getInstance();
                cal.add(Calendar.DAY_OF_MONTH,40);
        
                int year = cal.get(Calendar.YEAR);
                int month=cal.get(Calendar.MONTH)+1;
                int day=cal.get(Calendar.DAY_OF_MONTH);
        
                System.out.printf("year=%d,month=%d,day=%d%n",year,month,day);
        
        
        
        
            }
        }
        📤
        year=2023,month=5,day=12
    1. 문제점
      1. month→체계0~11: 혼동의 가능성
      1. 날짜 시간 변경시-원객체가 변경되는 문제점
        1. ㅓjava.time패키지 날짜,시간 변경시 새로운 인스턴스 생성반환
      1. 상수 필드의 체계가 매우 부족
      1. 메서드가 직관적X
        1. ADD가 날짜 추가,감소 다 담당
  1. java.time.format: 날짜,시간의 형식화
    1. DateTimeformatter
      1. .ofPattern(”패턴”)
      1. .format(TemporalAccessor): 날짜,시간→형식화 되면 문자열
      1. .parse:형식화된 문자열→java.time의 핵심 클래스로 변환
  1. java.time.temporal
    1. 날짜,시간 필드상수
      1. (temporalField인터페이스→chronoField(Enum상수))
    1. 날짜,시간 단위
      1. temporalUnit 인터페이스→chronoUnit(Enum상수)
  1. java.time.zone: 시간대 관련 클래스 모음

java.time 패키지의 핵심 클래스

  1. 핵심 클래스
    1. LocalDate: 날짜를 다루는 클래스
    1. LocalTime:시간을 다루는 클래스
    1. LocalDateTime:날짜와 시간
    1. zoneDateTime:LocalDateTime_zoneDld(시간대)
      1. 썸머타임제:자동계산
        1. zoneld
          1. .of(”시간대”):ex)Zoneid.of(”asia/seoul”)
    1. OffsetDateTime:LocalDAteTime+ZoneOffset(시간대+시간)
      1. 물리적 시간 차이(+9)
        1. ZoneOffset
          1. .of(”시간차이):zoneOffset.of(”+9”)

  1. 객체 생성하기
    1. static ….of (….):날짜,시간의 특정일시
    1. static ….now():현재 시점의 날짜와 시간
  1. Temporal과 TemporalAmount
    1. Temporal
      1. Temporal:날짜,시간,시간대📅⌚⌛
      1. TemporalAccessor:날짜,시간 조회 설계
      1. TemporalAdjustor:날짜,시간 변경 설계(위 세가지가 핵심 설계툴)
      1. localDate,LocalTime,LocalDateTime,ZonedDateTime,OffsetDateTime,instant(핵심적인 클래스)
        1. of,now
        1. get(…)조회
        1. plus(…)추가
        1. minus(…)감소
        1. with(…)변경
    1. TemporalAmount
      1. period:연월일
      1. Duration:비교
  1. TemporalIUnit과 TemporalField
    1. TemporalField -날짜 시간 필드-년,월,일
      1. ChronoField(Enum상수)
    1. TemportAlUnit-날짜,시간 단위-Days,HOURS
      1. ChronoUnit(Enum상수)
  1. 특정필드의 값 가져오기
    1. get(TemporalField … )
    1. get(TemporalUnit…):Period,Duration
  1. 필드의 값 변경하기
    1. plus(int amount, TemporalUnit …):추가
    1. minus(int amount,TemporalUnit):감소
    1. with(TemporalField,int amount):변경
  1. 날짜와 시간의 비교
    1. isAfter
    1. isBefore
    1. isEqual
  1. instant
    1. Epoch time:1970,1,1,자정
      1. 1ms 카운팅한 정수
      1. 1초 단위 카운팅/timeStamp
      1. UTC+0 (Coordinated Universal Time)
        1. GMT


참고

  • cal.add(int field, int amount) : 해당 필드에 지정된 값을 더한다. 만약 필드가 날짜이면 지정된 수의 일 수를 더하며, 시간이면 지정된 수의 시간을 더한다.
  • cal.roll(int field, boolean up) : 해당 필드를 더하거나 빼지 않고, 해당 필드만 변경한다. 만약 up이 true면 지정된 값을 더하고, false이면 지정된 값을 뺀다. 다른 필드에 영향을 주지 않는다.

ISO-8601은 날짜와 시간을 표현하는 국제 표준입니다. 이 표준은 날짜와 시간을 문자열로 표현하는 방법을 제공합니다. 이 방식은 YYYY-MM-DD 형식으로 날짜를 표현하고, T 문자를 사용하여 시간을 구분합니다. 시간은 HH:MM:SS 형식으로 표현되며, 시간대를 나타내는 문자열을 끝에 추가할 수 있습니다. 이 표준은 전 세계의 다양한 시스템에서 사용됩니다.

Period는 "3개월"이나 "4년"과 같은 기간을 나타내는 java.time 패키지의 클래스입니다. 이는 두 날짜 또는 시간 사이의 시간 간격을 나타내며, 해당 날짜 또는 시간에 대한 계산을 수행하는 데 사용됩니다.

UTC는 협정 세계시(Coordinated Universal Time)의 약자입니다. 이는 세계 표준시를 기준으로 한 시간대 표준입니다.

GMT는 Greenwich Mean Time의 약자로, 영국의 그리니치 천문대를 기준으로 한 시간대를 나타냅니다.

그리니치 천문대(Greenwich Observatory)는 영국 런던 그리니치에 위치한 천문대입니다. 그리니치 천문대는 1884년 국제자오선회의에서 선정한 본초 자오선(本初子午線)의 기준점으로 사용되었습니다. 이 자오선은 지구를 둘러싸고 있는 자오선 중 하나로, 그리니치 천문대를 지나는 선입니다. 이 자오선을 기준으로 하여 세계시(UTC)가 결정됩니다.

자오선은 지구를 둘러싸는 자오선 중 하나로, 그리니치 천문대를 지나는 선입니다. 이 자오선을 기준으로 하여 세계시(UTC)가 결정됩니다.

Enum 클래스는 자바에서 상수를 다루는 클래스입니다. 상수는 값을 한 번 정해놓으면 변경할 수 없으며, 프로그램 전체에서 공유됩니다. Enum 클래스는 이러한 상수 값들을 하나의 클래스로 정의하고, 그 외에 메서드나 인스턴스 변수도 추가할 수 있습니다. 이렇게 정의된 Enum 클래스의 상수 값은 다른 클래스에서 참조할 수 있으며, 값이 변경되지 않기 때문에 안정적인 프로그래밍을 할 수 있습니다.

public enum DayOfWeek {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

위 코드는 DayOfWeek라는 이름의 Enum 클래스를 정의하는 코드입니다. 이 클래스는 요일을 표현하는 상수 값들을 포함하고 있습니다. 이렇게 정의된 Enum 클래스는 다른 클래스에서 사용할 수 있으며, 상수 값이 변경되지 않기 때문에 안정적인 프로그래밍이 가능합니다.


Uploaded by N2T