티스토리 뷰

반응형

목차

1. Format 클래스

2. java.time 패키지


Format 클래스

* 숫자와 날짜를 원하는 형식의 문자열로 변환

* 숫자형식 : DecimalFormat

* 날짜형식 : SimpleDateFormat

* 매개변수화 된 문자열 형식 : MessageFormat

 

숫자 형식 클래스 : DecimalFormat

* 숫자 데이터를 원하는 형식으로 표현하기 위해 사용

* 적용할 패턴을 선택해 생성자 매개값으로 지정한 후, 객체 생성

DecimalFormat df = new DecimalFormat("#,###.0");
String result = df.format(1234567.89);

 

날짜 형식 클래스 : SimpleDateFormat

* Date 클래스의 toString() 메소드는 영문으로 된 날짜만 리턴

* 특정 문자열 포맷으로 얻고 싶다면 SiimpleDateFormat 클래스를 이용

* 패턴에는 자릿수에 맞게 기호를 반복해서 작성할 수 있음(yyyy는 년도를 4자리까지 표시하라는 의미)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
String strDate = sdf.format(new Date());

 

매개변수화 된 문자열 형식 클래스 : MessageFormat

* 문자열에 데이터가 들어갈 자리를 표시해 두고, 프로그램이 실행하면서 동적으로 데이터를 삽입해 문자열을 완성시킬 수 있음

//값 나열
String text = "회원ID : {0} \n회원 이름: {1} \n회원 전화: {2}";
String result1 = MessageFormat.format(text, id, name, tel);
//배열 대입
String sql = "insert into member values( {0}, {1}, {2} )";
Object[] arguments = { "'java'", "'신용권'", "'010-123-5678'" };
String result2 = MessageFormat.format(sql, arguments);

java.time 패키지

* 자바 8부터 추가된 패키지

* 날짜와 시간을 나타내는 여러 가지 API가 새롭게 추가됨

* 날짜와 시간을 조작하거나 비교하는 기능이 추가됨

- Date와 Calendar는 날짜와 시간을 조작하거나 비교하는 기능이 불충분

 

날짜와 시간 객체 생성

* 날짜와 시간을 표현하는 5개의 클래스

 

LocalDate

* now() : 컴퓨터의 현재 날짜 정보를 저장한 객체를 리턴

* of() : 매개값으로 주어진 날짜 정보를 저장한 객체를 리턴

LocalDate currDate = LocalDate.now();
LocalDate targetDate = LocalDate.of(2023, 3, 3);

 

LocalTime

* now() : 컴퓨터의 현재 시간 정보를 저장한 객체를 리턴

* of() : 매개값으로 주어진 시간 정보를 저장한 객체를 리턴

LocalTime currTime = LocalTime.now();
LocalTime targetTime = LocalTime.of(6, 20, 0, 0);

 

LocalDateTime

* now() : 컴퓨터의 현재 날짜와 시간 정보를 저장한 객체를 리턴

* of() : 매개값으로 주어진 날짜와 시간 정보를 저장한 객체를 리턴

LocalDateTime currDateTime = LocalDateTime.now();
LocalDateTime targetDateTime = LocalDateTime.of(2023, 3, 3, 21, 40, 0);

 

ZonedDateTime

* 타임존의 날짜와 시간을 저장하는 클래스 

* 존오프셋 : 협정세계시(그리니치천문대)와 차이 나는 시간(시차)를 말함

* 존아이디 : 타임존의 이름 [Asia/Seoul] 

* ZonedDateTime은 now() 정적 메소드에 ZoneId를 매개값으로 주고 얻을 수 있음

* ZoneId는 of() 메소드로 얻을 수 있다 : 매개값은 존아이디를 넣으면 된다.

ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
ZonedDateTime newyorkDateTime = ZonedDateTime.now(ZoneId.of("America/New_York"));
ZonedDateTime seoulDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));

 

Instant 

* 특정 시점의 타임스탬프로 사용됨 : 특정한 두 시점 간의 시간적 우선순위를 따질 때 사용

* java.util.Date와 유사하지만 Date는 로컬 컴퓨터의 현재 날짜와 시간을 기준으로 / Instance는 협정세계시를 기준으로

Instant instant1 = Instant.now();//instant라는 객체를 생성
Instant instant2 = Instant.now();//프로그램 멈춘 후에 2번 객체 동작
if(instant1.isBefore(instant2)) {System.out.println("instant1이 빠릅니다.");}
else if(instant1.isAfter(instant2)) {System.out.println("instant1이 늦습니다.");}
else {System.out.println("동일한 시간입니다.");}
System.out.println("차이(nanos): " + instant1.until(instant2, ChronoUnit.NANOS));

 

날짜와 시간에 대한 정보 얻기

* get이라는 메소드가 붙어있는 것들은 뒤에 오는 것들을 리턴해주는 메소드라고 생각하면 됨

* is 메소드는 true, false를 리턴해주는 것 

* isLeapYear()는 toLocalDate()메소드로 LocalDate로 변환 후 사용

 

*ZonedDateTime에서 제공하는 추가 메소드

 

날짜와 시간을 조작하기

빼기와 더하기

- 빼기의 형태 : minus + 변수+ (long)

- 더하기의 형태 : plus + 변수 + (long)

 

 

변경하기

* 날짜와 시간을 변경하는 메소드

 

* with(TemporalAdjuster adjuster) : 현재 날짜를 기준으로 상대적 날짜를 리턴한다. 매개값은 다음표의 메소드를 호출하면 됨

LocalDateTime targetDateTime = now.with(TemporalAdjusters.firstDayOfYear());

 

날짜와 시간을 비교하기

* 날짜와 시간을 비교하거나 차이를 구하는 메소드

 

* Period : 년, 월, 일의 양을 나타내는 날짜 기준 클래스

* Duration : 시, 분, 초, 나노초의 양을 나타내는 시간 기준 클래스

 

* between()메소드의 차이점

- Period와 Duration의 between() : 년, 월, 일, 초의 단순 차이를 리턴

- ChronoUnit열거 타입의 between() : 전체 시간을 기준으로 차이를 리턴

 

파싱과 포매팅

* 파싱 : 주어진 문자열로 날짜와 시간을 생성

* 포맷팅 : 날짜와 시간을 형식화된 문자열로 변환

 

파싱(Parsing) 메소드

* 날짜와 시간 정보가 포함된 문자열을 파싱해서 날짜와 시간을 생성하는 두개의 parse() 정적 메소드 

* 상황에 맞는 포맷 변환 같이 사용

 

* parse(CharSequence) 메소드는 기본적으로 ISO_LOCAL_DATE 포맷터를 사용해서 문자열을 파싱

LocalDate localDate = LocalDate.parse("2024-05-21");

 

* 다른 포맷터를 이용하고 싶다면 parse(CharSequence, DateTimeFormatter)를 사용

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
LocalDate localDate = LocalDate.parse("2024.05.21", formatter);

 

* DateTimeFormatter의 표준화된 포맷터들 

LocalDate localDate = LocalDate.parse("2024-05-21", DateTimeFormatter.ISO_LOCAL_DATE);

 

포맷팅(Formatting) 메소드

* 날짜와 시간을 포맷팅된 문자열로 변환

LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy년 M월 d일 a h시 m분");
String nowString = now.format(dateTimeFormatter);
반응형
댓글