본문 바로가기

JAVA

날짜와 시간의 형식화

 

getInstance() - 기본적으로 시스템의 날짜와 시간에 대한 벙보가 담겨 있음, 인스턴스를 반환 받을 수 있다

-static 인스턴스이다. static이 아니라면 객체 생성 후 호출해야하는 데 Calendar는 추살클래스이기 때문에 객체 생성이 불가능하기 때문이다

태국의 경우 , BuddhistCalendar , 그외에는 GregorianCalendar의 인스턴스를 반환

 

Calendar → Date

Calendar cal = Calendar.getInstance();
Date d = new Date(cal.getTimeInMillis()); // Date(Long date)

Date → Calender

Date d = new Date();
Calender cal = Calender.getInstance();
cal.setTime(d);

 

getTimeInMillis() : 1/1000초 단위로 값을 반환 한다

add()  일 필드의 값을 변경하면 월 필드도 변경 된다
roll() 일필드의 값만 변경 된다
지정한 필드 값을 원하는 만큼 증가 또는 감소  

 

날짜 계산을 위한 method

boolean isLeapYear(int year)  매개변수가 윤년이면 true를 아니면 false를 반환
int dayDiff(int y1, int m1, int d1, int y2, int m2, int d2) 두 날짜간의 차이를 일단 일단위로 반환 한다
int getDayOfWeek(int year, int month, int day) 지정한 날짜의 요일을 반환
(1~7 1, 일요일 )  
String convertDaytoDate(int day) 일단위의 값을 년월일 형태의 문자열로 변환하여 반환 한다.
int ConvertDatetoDay(int year, int month, int day) 년월일을 입력받아서 일단위로 변환

 

DecimalFormat

-숫자 데이터를 정수, 부동소수점, 금액등 다양한 형식으로 표현 가능

-일정한 형식의 텍스트 데이터를 숫자로 변환도 가능

 

SimpleDateFormat

+dateFormat은 추상클래스로 SimpleDateFormat의 조상이다.

+dateFormat는 추상클래스이므로 인스턴스를 생성하기 위해서는 getDateInstance()와 같은 static메소드를 이용해야 한다.

+getDateInstance()의 반환값 : DataFormat을 상속 박아 완전하게 구현한 SimpleDateFormat 인스턴스

 

data인스턴스를 Calendar 인스턴스로 변환 할때 calendar클래스의 setTime() 사용

parse(String source) : 문자열 source를 날짜 date 인스턴스로 변환

ChoieFormat : 특ㅂ정 범위에 속하는 값을 문자열로 변환

 

# : 경계값을 범위에 포함

< : 경계값을 범위에 포함시키지 않는다

 

MessageFormat : 정해진 양식에 맞게 출력 가능

*다수의 데이터를 같은 양식으로 보낼때 유용

*홑따옴표(')는 MessageFormat의 양식에 escape문자로 사용되기 때문에 문자열msg내에서 사용하려면 연속으로 두번 사용해야 함

java.time 패키지

 

JDK1.8부터 사용됨

java.time  날짜와 시간을 다루는데 필요한 핵심 클래스들을 제공
java.time.chrono 표준(IOS)이 아닌 달력 시스템을 위한 클래스들을 제공
java.time.format 날짜와 시간을 파싱하고 , 형식화 하기 위한 클래스들을 제공
java.tiem.temporal 날짜와 시간의 필드와 단위를 위한 클래스들을 제공
java.time.zone 시간대와 관련된 클래스들을 제공

위 클래스들의 공통점 : String class처럼 immutable 이다

 

java.time의 핵심 패키지 :

시간 사용시 ; LocalTime

날짜 사용시 : LocalDate

날짜 + 시간 : LocalDateTime

날짜+시간+시간대 : ZonedDateTime

 

객체 생성

java.time 패키지에 속한 클래스의 객체를 생성 시키는 가장 기본적인 방법

now() : 현재 날짜와 시간을 저장하는 객체

of() : 해당필드 값을 순서대로 지정해서 사용

날짜와 시간을 정의하기 위한 클래스 : Temporal, temporalAccessor, TemporalAdjuster인터페이스 구현

Duration과 Period : TemporalAmount인터페이스 구현

 

TemporalUnit (인터페이스) : 날짜와 시간 단위를 구현 해 놓은 것

TemporalUnit을 구현 한 것 : ChronoUnit

TemporalField (인터페이스): 년, 월, 일 등 날짜와 시간 필드를 정의 해 놓은 것

ChronoField : TemporalField 구현 한 것

boolean isSupported(TemporalUnit unit) // Temporal에 정의
boolean isSupported(TemporalFieldt field) // TemporalAccessor에 정의

 

localDate와 LocalTime을 반환하는 메소드 : now()

localDate와 LocalTime의 객체 생성하는 메소드 : of()

 

특정 필드값 가져오는 메소드 : get()

필드 값 변경하기 : with(), plus(), minus()

*필드를 변경하는 메소드들은 항상 새로운 객체를 생성해서 반환하므로 대입 연산자와 같이 사용해야 함

 

날짜와 시간 비교 - isAfter(), isBefore(), isEqual()

compareTo() // 같으면 0, 이전이면 -1, 이후면 1 

*equals()가 있는데 isEqual()을 제공하는 이유는 연표가 다른 두 날짜를 비교하기 위해서이다

 

Instant : 에포크 타임(1970-01-01 00:00:00 UTC)으로 부터 경과된 시간을 나노초 단위로 표현한다.

객체 생성할 떼 : now(), ofEposhSecond()

Instant는 시간을 초단위와 나노초로 나누어 저장한다.

 

UTC : Coordinated Universal Time : 세계 협정시

1972년 1월 1일부터 시행된 국제 표준시

 

LocalDateTime → LocalTime 또는 LocalDate로 변환

LocalDateTime → ZonedDateTime : atZone()으로 시간대 정보 추가

ZoneOffSet : UTC로부터 얼마만큼 떨어져 있는지 표현한다.

 

ZonedDateTime 변환

LocalDate  toLocalDate()
LocalTime toLocalTime()
LocalDateTime toLocalDateTime()
OffsetDateTime toOffsetDateTiem()
long toEpochSecond()
Instant toInstant()

TemporalAdjusters : 자주 쓰일 만한 날짜들을 계산 해주는 메소드를 정의해 놓은 것

 

with() : localTime(), LocalDateTime(), ZonedDateTime(), Instant등 날짜아 시간에 관련되 클래스에 포함 되어 있다.

 

between과 until() : 날짜, 시간의 차이를 구하기 위한 메소드

between은 static메소드 , until은 인스턴스 메소드 이다

 

다른 단위로 변환 :

period long toTotalMoths() 년월일을 월단위로 해서 반환

duration long toDays() 일단위로 변환해서 반환
duration long toHours() 시간단위로 변환해서 반환
duration long toMinutes() 분단위로 변환해서 반환
duration long toMillis() 천분의 일단위로 변환해서 반환
duration long toNanos() 나노초 단위로 변환해서 반환