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, "/");
메소드 | | 설명 |
---|
int | countTokens() | 꺼내지 않고 남아 있는 토큰의 수 |
boolean | hasMoreTokens() | 남아 있는 토큰이 있는지 여부 |
String | nextToken() | 토큰을 하나씩 꺼내옴 |
- 다음 메소드들을 이용해서 전체 토큰 수, 남아 있는 토큰 여부를 확인한 다음, 토큰을 읽으면 된다.
- 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는 추가적으로 항목 정렬, 항목 검색, 항목 비교와 같은 기능을 제공한다.
리턴 타입 | 메소드 이름 | 설명 |
---|
int | binarySerarch(배열, 찾는값) | 전체 배열 항목에서 찾는 값이 있는 인덱스 리턴 |
타겟 배열 | copyOf(원본배열, 복사할길이) | 원본 배열의 0번 인덱스에서 복사할 길이만큼 복사한 배열 리턴, 복사할 길이는 원본 배열의 길이보다 커도 되며, 타겟 배열의 길이가 된다. |
타겟 배열 | copyOfRange(원본배열, 시작인덱스, 끝인덱스) | 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사한 배열 리턴 |
boolean | deepEquals(배열, 배열) | 두 배열의 깊은 비교(중첩 배열의 항목까지 비교) |
boolean | equals(배열, 배열) | 두 배열의 얕은 비교(중첩 배열의 항목은 비교하지 않음) |
void | fill(배열, 값) | 전체 배열 항목에 동일한 값을 저장 |
vlid | fill(배열, 시작인덱스, 끝인덱스, 값) | 시작 인덱스부터 끝 인덱스까지의 항목에만 동일한 값을 저장 |
void | sort(배열) | 배열의 전체 항목을 오름차순으로 정렬 |
String | toString(배열) | “[값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)
→ 단순히 배열을 복사할 목적이라면 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 포장 값 비교
- 포장 객체는 내부의 값을 비교하기 위해 “==”와 “!=” 연산자를 사용할 수 없다.
- 이 연산자는 내부의 값을 비교하는 것이 아니라 포장 객체의 참조를 비교하기 때문이다.
타입 | 값의 범위 |
---|
boolean | true, 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) | 매개값으로 주어진 종자값이 설정된다. |
리턴값 | 메소드(매개 변수) | 설명 |
---|
boolean | nextBoolean() | boolean 타입의 난수를 리턴 |
double | nextDouble() | double 타입의 난수를 리턴(0.0 ≤ ~ < 1.0) |
int | nextInt() | int 타입의 난수를 리턴 |
int | nextInt(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() 메소드를 이용해서 날짜와 시간에 대한 정보를 읽을 수 있다.
- 형식 클래스는 java.text 패키지에 포함되어 있으며 숫자 형식을 위해 DecimalFormat, 날짜 형식을 위해 SimpleDateFormat, 매개 변수화된 형식을 위해 MessageFormat 등을 제공한다.
- DecimalFormat은 숫자 데이터를 원하는 형식으로 표현하기 위해서 패턴을 사용하는데 다음 표는 패턴의 예를 보여준다.
기호 | 의미 | 패턴 예 | 1234567.89 → 변환 결과 |
---|
0 | 10진수(빈자리는 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() 메소드를 호출해서 패턴이 적용된 문자열을 얻으면 된다.
- Date 클래스의 toString() 메소드는 영문으로된 날짜를 리턴하는데 만약 특정 문자열 포맷으로 얻고 싶다면 java.text.SimpleDateFormat 클래스를 이용하면 된다.
패턴 문자 | 의미 | 패턴 문자 | 의미 |
---|
y | 년 | H | 시(0~23) |
M | 월 | h | 시(1~12) |
d | 일 | K | 시(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());
- 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.chrono | ISO-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 날짜와 시간에 대한 정보 얻기
클래스 | 리턴타입 | 메소드(매개 변수) | 설명 |
---|
LocalDate | int | getYear() | 년 |
| Month | getMonth() | Month 열거값 |
| int | getMonthValue() | 월 |
| int | getDayOfYear | 일년의 몇 번째 일 |
LocalDate | int | getDayOfMonth() | 월의 몇 번째 일 |
| DayOfWeek | getDayOfWeek() | 요일 |
| boolean | isLeapYear() | 윤년 여부 |
LocalTime | int | getHour() | 시간 |
| int | getMinute() | 분 |
| int | getSecond() | 초 |
| int | getNano() | 나노초 리턴 |
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 | 나노초 변경 |