11-2. 기본 API 클래스

Bummy·2024년 1월 7일
0

JAVA

목록 보기
11/11
post-thumbnail

11.8 StringTokenizer 클래스

  • 문자열이 특정 구분자(delimiter)로 연결되어 있을 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해서는 String의 split() 메소드를 이용하거나, java.util 패키지의 StringTokenizer 클래스를 이용할 수 있다.

11.8.1 split() 메소드

String[] result = "문자열".split("정규표현식");
홍길동&이수홍,박연수,김자바-최명호
String[] names = text.split("&|,|-");

11.8.2 StringTokenizer 클래스

  • 문자열이 한 종류의 구분자로 연결되어 있을 경우, StringTokenizer 클래스를 사용하면 손쉽게 문자열을 분리해 낼 수 있다.
  • StringTokenizer 객체를 생성할 때 첫 번째 매개값으로 전체 문자열을 주고, 두 번째 매개값으로 구분자를 주면 된다.
StringTokenizer st = new StringTokenizer("문자열", "구분자");

String text = "홍길동/이수홍/박연수";
StringTokenizer st = new StringTokenizer(text, "/");
메소드설명
intcountTokens()꺼내지 않고 남아 있는 토큰의 수
booleanhasMoreTokens()남아 있는 토큰이 있는지 여부
StringnextToken()토큰을 하나씩 꺼내옴
  • 다음 메소드들을 이용해서 전체 토큰 수, 남아 있는 토큰 여부를 확인한 다음, 토큰을 읽으면 된다.
  • nextToken() 메소드로 토큰을 하나 꺼내오면 StringTokenizer 객체에는 해당 토큰이 없어진다.
  • 만약 StirngTokenizer 객체에서 더 이상 가져올 토큰이 없다면 nextToken() 메소드는 java.util.NoSuchElementException 예외를 발생시킨다.
  • nextToken() 메소드를 사용하기 전에 hasMoreTokens() 메소드로 꺼내올 토큰이 있는지 조사한 후 nextToken() 메소드를 호출하는 것이 좋은 코딩 방법이다.

11.9 StringBuffer, StringBuilder 클래스

  • 문자열을 저장하는 String은 내부의 문자열을 수정할 수 없다.
String data = "ABC";
data += "DEF";

→ “ABC”에 “DEF”가 추가되었기 때문에 한 개의 String 객체가 사용되었다고 생각할 수 있지만, String 객체는 내부 데이터를 수정할 수 없으므로 “ABCDEF”라는 새로운 String 객체가 생성되고 data 변수는 해당 객체를 참조하게 된다.

  • 문자열을 결합하는 + 연산자를 많이 사용하면 할수록 그만큼 String 객체의 수가 늘어나기 때문에, 프로그램 성능을 느리게 하는 요인이 된다.
💡 문자열을 변경하는 작업이 많을 경우에는 String 클래스를 사용하는 것보다는 java.lang 패키지의 StirngBuffer 또는 StringBuilder 클래스를 사용하는 것이 좋다.

이 두 클래스는 내부 버퍼(데이터를 임시로 저장하는 메모리)에 문자열을 저장해 두고, 그 안에서 추가, 수정, 삭제 작업을 할 수 있도록 설계되어 있다.

StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(16);
StringBuilder sb = new StringBuilder("Java");
  • 기본 생성자인 StringBuilder()는 16개의 문자들을 저장할 수 있는 초기 버퍼를 만들고, StringBuilder(int capacity) 생성자는 capacity로 주어진 개수만큼 문자들을 저장할 수 있는 초기 버퍼를 만든다.
  • StringBuilder는 버퍼가 부족할 경우 자동으로 버퍼 크기를 늘리기 때문에 초기 버퍼의 크기는 그다지 중요하지 않다.
메소드설명
append(…)문자열 끝에 주어진 매개값을 추가
insert(int offset, …)문자열 중간에 주어진 매개값을 추가
delete(int start, int end)문자열의 일부분을 삭제
deleteCharAt(int index)문자열에서 주어진 index의 문자를 삭제
replace(int start, int end, String str)문자열의 일부분을 다른 문자열로 대치
reverse()문자열의 순서를 뒤바꿈
setCharAt(int index, char ch)문자열에서 주어진 index의 문자를 다른 문자로 대치
  • 다음 메소드를 활용해서 문자 추가, 삽입, 삭제 등의 작업을 할 수 있다.

11.10 정규 표현식과 Pattern 클래스

  • 문자열이 정해져 있는 형식으로 구성되어 있는지 검증해야하는 경우 정규 표현식과 비교한다.

11.10.1 정규 표현식 작성 방법

  • 정규 표현식을 작성하는 방법은 API 도큐먼트에서 java.util.regex.Pattern 클래스를 찾아 Summary of regular-expression constructs를 참조하면 된다.
  • 정규 표현식은 쉽게 말해서 문자 또는 숫자 기호와 반복 기호가 결합된 문자열이다.
기호설명
[][abc] : a, b, c 중 하나의 문자

[^abc] : a, b, c 이외의 하나의 문자
[a-zA-Z] : a~z, A~Z 중 하나의 문자 |
| \d | 한개의 숫자, [0-9]와 동일 |
| \s | 공백 |
| \w | 한 개의 알파벳 또는 한개의 숫자, [a-zA-Z_0-9] |
| ? | 없음 또는 한 개 |
| * | 없음 또는 한 개 이상 |
| + | 한 개 이상 |
| {n} | 정확히 n개 |
| {n,} | 최소한 n개 |
| {n, m} | n개에서부터 m개까지 |
| () | 그룹핑 |

02-123-1234 또는 010-1234-5678 과 같은 전화번호를 위한 정규 표현식
(02|010)-\d{3,4}-\d{4}

white@naver.com과 같은 이메일을 위한 정규 표현식
\w+@\w+\.\w+(\.\w+)?

11.10.2 Pattern 클래스

  • 정규 표현식으로 문자열을 검증하는 방법은 java.util.regex.Pattern 클래스의 정적 메소드인 matches() 메소드를 활용하면 된다.
boolean result = Pattern.matches("정규식", "검증할 문자열");

11.11 Arrays 클래스

  • Arrays 클래스는 배열 조작 기능을 가지고 있다. 배열 조작이란 배열의 복사, 항목 정렬, 항목 검색과 같은 기능을 말한다.
  • 단순 배열 복사는 System.arraycopy() 메소드를 활용할 수 있으나, Arrays는 추가적으로 항목 정렬, 항목 검색, 항목 비교와 같은 기능을 제공한다.
리턴 타입메소드 이름설명
intbinarySerarch(배열, 찾는값)전체 배열 항목에서 찾는 값이 있는 인덱스 리턴
타겟 배열copyOf(원본배열, 복사할길이)원본 배열의 0번 인덱스에서 복사할 길이만큼 복사한 배열 리턴, 복사할 길이는 원본 배열의 길이보다 커도 되며, 타겟 배열의 길이가 된다.
타겟 배열copyOfRange(원본배열, 시작인덱스, 끝인덱스)원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열 리턴
booleandeepEquals(배열, 배열)두 배열의 깊은 비교(중첩 배열의 항목까지 비교)
booleanequals(배열, 배열)두 배열의 얕은 비교(중첩 배열의 항목은 비교하지 않음)
voidfill(배열, 값)전체 배열 항목에 동일한 값을 저장
vlidfill(배열, 시작인덱스, 끝인덱스, 값)시작 인덱스부터 끝 인덱스까지의 항목에만 동일한 값을 저장
voidsort(배열)배열의 전체 항목을 오름차순으로 정렬
StringtoString(배열)“[값1, 값2, …]”와 같은 문자열 리턴

11.11.1 배열 복사

  • 배열 복사를 위해 사용할 수 있는 메소드는 copyOf(원본배열, 복사할길이), copyOfRange(원본배열, 시작인덱스, 끝인덱스)이다.
  • copyOf() 메소드는 원본 배열의 0번 인덱스에서 복사할 길이만큼 복사한 타겟 배열을 리턴하는데, 복사할 길이는 원본 배열의 길이보다 커도 되며, 타겟 배열의 길이가 된다.
char[] arr1 = {'J', 'A', 'V', 'A'};
char[] arr2 = Arrays.copyOf(arr1, arr1.length);

→ arr1[] 배열의 전체 항목을 복사해서 arr2[] 배열을 생성

  • copyRange(원본배열, 시작인덱스, 끝인덱스)는 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열을 리턴한다.
char[] arr1 = {'J', 'A', 'V', 'A'};
char[] arr2 = Arrays.copyOf(arr1, 1, 3);

→ arr1[] 배열 항목 중 1번, 2번 인덱스 항목을 arr2[] 배열의 0번, 1번 인덱스 항목으로 복사한다.

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
//Object src: 원본배열 / int srcPos : 원본시작 인덱스 / Object dest : 타겟배열 
//int destPos: 타겟시작인덱스 / int length : 복사 개수
//총 5개의 매개값이 필요

→ 단순히 배열을 복사할 목적이라면 System.arraycopy() 메소드를 이용할 수 있다.

11.11.2 배열 항목 비교

  • Arrays의 equals()와 deepEquals()는 배열 항목을 비교한다.
  • equals()는 1차 항목의 값만 비교하고, deepEquals()는 1차 항목이 서로 다른 배열을 참조할 경우 중첩된 배열의 항목까지 비교한다.

11.11.3 배열 항목 정렬

  • 기본 타입 또는 String 배열은 Arrays.sort() 메소드의 매개값으로 지정해주면 자동으로 오름차순 정렬이 된다.

11.11.4 배열 항목 검색

  • 배열 항목을 검색하려면 먼저 Arrays.sort() 메소드로 항목들을 오름차순으로 정렬한 후, Arrays.binarySearch() 메소드로 항목을 찾아야 한다.
public class SearchExample{
	public static void main(String[] args){
		//기본 타입값 검색
		int[] score= {99, 97, 98};
		Arrays.sort(scores);
		int index = Arrays.binarySearch(scores, 99);
		System.out.println("찾은 인덱스: " + index);

		//문자열 검색
		String[] name = {"홍길동", "박동수", "김민수"};
		Arrays.sort(names);
		index = Arrays.binarySearch(names, "홍길동");
		System.out.println("찾은 인덱스: " + index);

		//객체 검색
		Member m1 = new Member("홍길동");
		Member m2 = new Member("박동수");
		Member m3 = new Member("김민수");
		Member[] members = {m1, m2, m3};
		Arrays.sort(members);
		index = Arrays.binarySearch(members, m1);
		System.out.println("찾은 인덱스 :" + inde);
	}
}

11.12 Wrapper(포장) 클래스

  • 자바는 기본 타입(byte, char, short, int, long, float, double, boolean)의 값을 갖는 객체를 생성할 수 있다. 이런 객체를 포장(Wrapper) 객체라고 하는데, 그 이유는 기본 타입의 값을 내부에 두고 포장하기 때문
  • 포장 객체의 특징은 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다. 만약 내부의 값을 변경하고 싶다면 새로운 포장 객체를 만들어야한다.

11.12.1 박싱(Boxing)과 언박싱(UnBoxing)

  • 기본 타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing)이라고 하고, 반대로 포장 객체에서 기본 타입의 값을 얻어내는 과정을 언박싱(UnBoxing)이라고 한다.
기본 타입 값을 줄 경우문자열을 줄 경우
Byte obj = new Byte(10);Byte obj = new Byte(”10”);
Character obj = new Character(’가’;)없음
Short obj = new Short(100);Short obj = new Short(”100”);
Integer obj = new Integer(1000);Integer obj = new Integer(”1000”);
Long obj = new Long(10000);Long obj = new Long(”10000”);
Float obj = new Float(2.5F);Float obj = new Float(”2.5F”);
Double obj = new Double(3.5);Double obj = new Double(”3.5”);
Boolean obj = new Boolean(true);Boolean obj = new Boolean(”true”);

→ 박싱하는 방법은 다음과 같이 포장 클래스의 생성자 매개값으로 기본 타입의 값 또는 문자열을 넘겨주면 된다.

Integer obj = Integer.valueOf(1000);
Integer obj = Integer.valueOf("1000");

→ 생성자를 이용하지 않아도 각 포장 클래스마다 가지고 있는 정적 valueOf() 메소드를 사용할 수도 있다.

기본 타입의 값을 이용
byte num = obj.byteValue();
char ch = obj.charValue();
short num = obj.shortValue();
int num = obj.intValue();
long num = obj.longValue();
float num = obj.floatValue();
double num = obj.doubleValue();
boolean num = obj.booleanValue();

→ 언방식(다시 기본 타입의 값을 얻어 내는 것)을 위해서는 각 포장 클래스마다 가지고 있는 “기본타입명 + Value()” 메소드를 호출하면 된다.

11.12.2 자동 박싱과 언박싱

  • 기본 타입 값을 직접 박싱, 언박싱하지 않아도 자동적으로 박싱과 언박싱이 일어나는 경우가 있다.
  • 자동 박싱은 포장 클래스 타입에 기본값이 대입될 경우에 발생한다.
Integer obj = 100; //자동 박싱

→ int 타입의 값을 Integer 클래스 변수에 대입하면 자동 박싱이 일어나 힙 영역에 Integer 객체가 생성된다.

  • 자동 언박싱은 기본 타입에 포장 객체가 대입될 경우에 발생한다.
Integer obj = new Integer(200);
int value1 = obj; //자동 언박싱
int value2 = obj + 100; //자동 언박싱

→ Integer 객체를 int 타입 변수에 대입하거나, Integer 객체와 int 타입값을 연산하면 Integer 객체로부터 int 타입의 값이 자동 언박싱되어 연산된다.

📌 자동 박싱과 언박싱은 자바 5부터 추가된 기능이기 때문에 자바 4 이전 버전에서는 직접 박싱과 언박싱을 해주어야한다.

11.12.3 문자열을 기본 타입 값으로 변환

  • 포장 클래스의 주요 용도는 기본 타입의 값을 박싱해서 포장 객체로 만드는 것이지만, 문자열을 기본 타입 값으로 변환할 때에도 많이 사용된다.
기본 타입의 값을 사용
byte num = Byte.parseByte(”10”);
short num = Short.parseShort(”100”);
int num = Integer.parseInt(”1000”);
long num = Long.parseLong(”10000”);
float num = Float.parseFloat(”2.5F”);
double num = Double.parseDobule(”3.5”);
boolean bool = Boolean.parseBoolean(”true”);

11.12.4 포장 값 비교

  • 포장 객체는 내부의 값을 비교하기 위해 “==”와 “!=” 연산자를 사용할 수 없다.
  • 이 연산자는 내부의 값을 비교하는 것이 아니라 포장 객체의 참조를 비교하기 때문이다.
타입값의 범위
booleantrue, false
char\u0000 ~ \u007f
byte, short, int-128 ~ 127
  • 박싱된 값이 표에 있는 값이라면 ==와 != 연산자를 사용해서 내부의 값을 바로 비교할 수 있지만 그 이외의 경우에는 해당 연산자를 사용할 수 없다.

11.13 Math, Random 클래스

11.13.1 Math 클래스

  • java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있다.
  • Math 클래스에서 제공하는 메소드는 모두 정적 메소드이므로 Math클래스로 바로 사용이 가능하다.
메소드설명예제 코드리턴값

| int abs(int a)
double abs(double a) | 절대값 | int v1 = Math.abs(-5);
double v2 = Math.abs(-3.14); | v1 = 5
v2 = 3.14 |
| double ceil(double a) | 올림값 | double v3 = Math.ceil(5.3);
double v4 = Math.ceil(-5.3); | v3 = 6.0
v4 = -5.0 |
| double floor(double a) | 버림값 | double v5 = Math.floor(5.3);
double v6 = Math.floor(-5.3); | v5 =5.0
v6 = -6.0 |
| int max(int a, int b)
double max(double a, double b) | 최대값 | int v7 = Math.max(5, 9);
double v8 = Math.max(5.3, 2.5); | v7 = 9
v8 = 5.3 |
| int min(int a, int b)
double min(double a, double b) | 최소값 | int v9 = Math.min(5, 9);
double v10 = Math.min(5.3, 2.5); | v9 = 5
v10 = 2.5 |
| double random() | 랜덤값 | double v11 = Math.random(); | 0.0 ≤ v11 ≤ 1.0 |
| double rint(double a) | 가까운 정수의 실수값 | double v12 = Math.rint(5.3);
double v13 = Math.rint(5.7); | v12 = 5.0
v13 = 6.0 |
| long round(double a) | 반올림값 | long v14 = Math.round(5.3);
long v15 = Math.round(5.7); | v14 = 5
v15 = 6 |

11.13.2 Random 클래스

  • java.util.Random 클래스는 난수를 얻어내기 위해 다양한 메소드를 제공한다,
  • Math.random() 메소드는 0.0에서 1.0 사이의 double 난수를 얻는 데만 사용한다면, Random 클레스는 boolean, int, long, float, double 난수를 얻을 수 있다.
  • Random 클래스는 종자값(seed)을 설정할 수 있다. 종자값은 난수를 만드는 알고리즘에 사용되는 값으로 종자값이 같으면 같은 난수를 얻는다,
생성자설명
Random()호출 시마다 다른 종자값(현재시간 이용)이 자동 설정된다.
Random(long seed)매개값으로 주어진 종자값이 설정된다.
리턴값메소드(매개 변수)설명
booleannextBoolean()boolean 타입의 난수를 리턴
doublenextDouble()double 타입의 난수를 리턴(0.0 ≤ ~ < 1.0)
intnextInt()int 타입의 난수를 리턴
intnextInt(int n)int 타입의 난수를 리턴(0 ≤ ~ ≤ n)

11.14 Date, Calendar 클래스

  • 자바는 시스템의 날짜 및 시각을 읽을 수 있도록 Date와 Calendar 클래스를 제공하고 있다.

11.14.1 Date 클래스

  • Date 클래스는 객체 간에 날짜 정보를 주고 받을 때 주로 사용된다.
Date now = new Date();

11.14.2 Calendar 클래스

  • Calendar 클래스는 추상 클래스이므로 new 연산자를 사용해서 인스턴스를 생성할 수 없다.
  • 날짜와 시간을 계산하는 방식이 지역과 문화, 나라에 따라 다르기 때문이다.
Calendar now = Calendar.getInstance();

→ Calendar 클래스의 정적 메소드인 getInstance() 메소드를 이용하면 현재 운영체제에 설정되어 있는 시간대를 기준으로 한 Calendar 하위 객체를 얻을 수 있다.

int year = now.get(Calendar.YEAR); //년도를 리턴
int month = now.get(Calendar.MONTH) + 1; //월을 리턴
int day = now.get(Calendar.DAY_OF_MONTH); //일을 리턴
int week = now.get(Calendar.DAY_OF_WEEK); //요일을 리턴
int amPm = now.get(Calendar.AM_PM); //오전/오후를 리턴
int hour = now.get(Calendar.HOUR); //시를 리턴
int minute = now.get(Calendar.MINUTE); //분을 리턴
int second = now.get(Calendar.SECOND); //초를 리턴

→ Calendar 객체를 얻었다면 get() 메소드를 이용해서 날짜와 시간에 대한 정보를 읽을 수 있다.


11.15 Format 클래스

  • 형식 클래스는 java.text 패키지에 포함되어 있으며 숫자 형식을 위해 DecimalFormat, 날짜 형식을 위해 SimpleDateFormat, 매개 변수화된 형식을 위해 MessageFormat 등을 제공한다.

11.15.1 숫자 형식 클래스(DecimalFormat)

  • DecimalFormat은 숫자 데이터를 원하는 형식으로 표현하기 위해서 패턴을 사용하는데 다음 표는 패턴의 예를 보여준다.
기호의미패턴 예1234567.89 → 변환 결과
010진수(빈자리는 0으로 채움)0

0.0
00000000000 | 12345678
1234567.9
0001234567.890000 |
| # | 10진수(빈자리는 채우지 않음) | #
#.#
#############.#### | 12345678
1234567.9
1234567.89 |
| . | 소수점 | #.0 | 1234567.9 |
| - | 음수 기호 | +#.0 | +1234567.9
-1234567.9 |
| , | 단위 구분 | #,###.0 | 1,234,567.9 |
| E | 지수 문자 | 0.0E0 | 1.2E6 |
| ; | 양수와 음수의 패턴을 모두 기술할 경우, 패턴 구분 문자 | +#,###;-#,### | +1234,568(양수일 때)
-1234,568(음수일 때) |
| % | 100을 곱한 후에 % 문자 붙임 | #.# % | 123456789% |
| \u00A4 | 통화 기호 | \u00A4 #,### | ₩1,234,568 |

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

→ 적용할 패턴을 선택했다면 DecimalFormat 생성자 매개값으로 지정해서 객체를 생성하면된다. 그리고 나서 format() 메소드를 호출해서 패턴이 적용된 문자열을 얻으면 된다.

11.15.2 날짜 형식 클래스(SimpleDateFormat)

  • Date 클래스의 toString() 메소드는 영문으로된 날짜를 리턴하는데 만약 특정 문자열 포맷으로 얻고 싶다면 java.text.SimpleDateFormat 클래스를 이용하면 된다.
패턴 문자의미패턴 문자의미
yH시(0~23)
Mh시(1~12)
dK시(0~11)
D월 구분이 없는 일(1~365)k시(1~24)
E요일m
a오전/오후s
w년의 몇 번째 주S밀리세컨드(1/1000초)
W월의 몇 번째 주
SimpleDateFormat sdf = new SimpleDateformat("yyyy년 MM월 dd일");
String strDate = sdf.format(new Date());

11.15.3 문자열 형식 클래스(MessageFormat)

  • MessageFormat 클래스를 사용하면 문자열에 데이터가 들어갈 자리를 표시해 두고, 프로그램이 실행하면서 동적으로 데이터를 삽입해 문자열을 완성 시킬 수 있다.
String message = "회원ID: {0} \n회원 이름: {1} \n회원 전화: {2}";
String result = MessageFormat.format(message, id, name, tel);

//값을 나열하는 대신 배열을 이용해서 인덱스 순서에 맞게 대입할 수도 있다.

11.16 java.time 패키지

  • 자바 8부터 날짜와 시간을 나타내는 여러 가지 API가 새롭게 추가 되었다.
패키지설명
java.time날짜와 시간을 나타내는 핵심 API인 LocaDate, LocalDateTime, ZonedDateTime을 포함하고 있다. 이 클래스들은 ISO-8601에 정의된 달력 시스템에 기초한다.
java.time.chronoISO-8601에 정의된 달력 시스템 이외에 다른 달력 시스템이 필요할 때 사용할 수 있는 API들이 포함되어 있다.
java.time.format날짜와 시간을 파싱하고 포맷팅하는 API들이 포함되어 있다.
java.time.temporal날짜와 시간을 연산하기 위한 보조 API들이 포함되어 있다.
java.time.zone타임존을 지원하는 API들이 포함되어 있다.

11.16.1 날짜와 시간 객체 생성

클래스명설명
LocalDate로컬 날짜 클래스
LocalTime로컬 시간 클래스
LocalDateTime로컬 날짜 및 시간 클래스(LocalDate + LocalTime)
ZonedDateTime특정 타임존(TimeZone)의 날짜와 시간 클래스
Instant특정 시점의 Time-Stamp 클래스

LocalDate

  • LocalDate는 로컬 날짜 클래스로 날짜 정보만을 저장할 수 있다.
  • now()는 컴퓨터의 현재 날짜 정보를 저장한 LocalDate 객체를 리턴하고 of()는 매개값으로 주어진 날짜 정보를 저장한 LocalDate 객체를 리턴한다.
LocalDate currDate = LocalDate.now();
LocalDate targetDAte = LocalDate.of(int year, int month, int dayOfMonth);

LocalTime

  • LocalTime은 로컬 시간 클래스로 시간 정보만을 저장할 수 있다.
  • now()는 컴퓨터의 현재 시간 정보를 저장한 LocalDate 객체를 리턴하고 of()는 매개값으로 주어진 시간 정보를 저장한 LocalDate 객체를 리턴한다.
LocalTime currTime = LocalTime.now();
LocalTime targetTime = LocalTime.of(int hour, int minute, int second, 
int nanoOfSecond);

LocalDateTime

  • LocalDateTime은 LocalDate와 LocalTime을 결합한 클래스로 볼 수 있고 날짜와 시간 정보를 모두 저장할 수 있다.

ZonedDateTime

  • ISO-8601 달력 시스템에서 정의하고 있는 타임존의 날짜와 시간을 저장하는 클래스

Instant

  • Instant 클래스는 날짜와 시간의 정보를 얻거나 조작하는데 사용되지 않고, 특정 시점의 타임스탬프로 주로 사용된다.
  • 주로 특정한 두 시점 간의 시간적 우선순위를 따질 때 사용한다.

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

클래스리턴타입메소드(매개 변수)설명
LocalDateintgetYear()
MonthgetMonth()Month 열거값
intgetMonthValue()
intgetDayOfYear일년의 몇 번째 일
LocalDateintgetDayOfMonth()월의 몇 번째 일
DayOfWeekgetDayOfWeek()요일
booleanisLeapYear()윤년 여부
LocalTimeintgetHour()시간
intgetMinute()
intgetSecond()
intgetNano()나노초 리턴

11.16.3 날짜와 시간을 조작하기

빼기 더하기

메소드(매개변수)설명
minusYear(long)년 빼기
minusMonth(long)달 빼기
minusDays(long)일 빼기
minusWeek(long)주 빼기
plusYear(long)년 더하기
plusMonths(long)달 더하기
plusWeeks(long)주 더하기
plusDays(long)일 더하기
minusHours(long)시간 빼기
minusMinute(long)분 빼기
minusSeconds(long)초 빼기
minusNanos(long)나노초 빼기
plusHours(long)시간 더하기
plusMinutes(long)분 더하기
plusSecond(long)초 더하기
plusNanos(long)나노초 더하기

변경하기

메소드(매개 변수)설명
withYear(int)년 변경
withMonth(int)월 변경
withDayOfMonth(int)월의 일 변경
withDayOfYear(int)년의 일 변경
with(TemporalAdjuster adjuster)상대 변경
withHour(int)시간 변경
withMinute(int)분 변경
withSecond(int)초 변경
withNano나노초 변경

0개의 댓글