Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
...
Date d = new Date(cal.getTimeInMillis());
Date를 Calendar로 변환
Date d = new Date();
...
Calendar cal = Calendar.getInstance();
cal.setTime(d)
set( )으로 날짜와 시간 지정할 수 있다.
void set(int field, int value)
void set(int year, int month, int date)
void set(int year, int month, int date, int hourOfDay, int minute)
void set(int year, int month, int date, int hourOfDay, int minute, int second)
두 날짜간 차이를 구하기 위해서는 두 날짜가를 최소 단위인 초단위로 변경해서 계산해야한다.
getTimeInMillis() 1/1000초 단위이기 때문에 일 단위를 얻기 위해서는 '24(시간) 60(분) 60(초) * 1000' 의 변환이 필요하다.
숫자를 형식화 하기 위한 클래스 (정수, 부동소수점, 금액 등)
기호 | 의미 | 패턴 | 결과(1234567.89) |
---|---|---|---|
0 | 10진수(값이 없을땐 0) | 0 0.0 0000000000.0000 | 1234568 1234567.9 0001234567.8900 |
# | 10진수 | # #.# ##########.#### | 1234568 1234567.9 1234567.89 |
. | 소수점 | #.# | 1234567.9 |
- | 음수 부호 | #.#- | 1234567.9- -1234567.9 |
E | 지수 기호 | #E0 0E0 ##E0 00E0 | .1E7 1E6 1.2E6 12E5 |
; | 패턴 구분자 | #,###.##+;#,###.##- | 1,234,567.89+(양수일 때) 1,234,567.89-(음수일 때) |
% | 퍼센트 | #.#% | 123456789% |
사용 예
double number = 123.456789;
DecimalFormat df1 = new DecimalFormat("0000.000");
DecimalFormat df2 = new DecimalFormat("####.##");
System.out.println(df1.format(number));
System.out.println(df2.format(number));
/*
* 실행결과
* 0123.457
* 123.46
*/
날짜와 시간의 형태를 다양한 형식으로 출력
기호 | 의미 | 보기 |
---|---|---|
G | 연대(BC, AD) | AD |
y | 년도 | 2021 |
M | 월(1~12 또는 1월~12월) | 10 또는 10월, OCT |
w | 년의 몇 번째 주(1~53) | 50 |
W | 월의 몇 번째 주(1~5) | 3 |
D | 년의 몇 번째 일(1~366) | 100 |
d | 월의 몇 번째 일(1~31) | 15 |
F | 월의 몇 번째 요일(1~5) | 1 |
E | 요일 | 월 |
a | 오전/오후(AM, PM) | PM |
H | 시간(0~23) | 15 |
k | 시간(0~23) | 13 |
K | 시간(0~11) | 10 |
h | 시간(1~12) | 10 |
m | 분(0~59) | 35 |
s | 초(0~59) | 55 |
S | 1/1000초(0~999) | 253 |
z | Time zone(General time zone) | GMT+9:00 |
Z | Time zone(RFC 822 time zone) | +0900 |
사용 예
DateFormat df1 = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
Date d = df1.parse("2020년 1월 6일"); // 문자열을 Date로 변환
String result = df2.format(d));
연속적 또는 불연속적들을 처리하는데 if문이나 switch문을 사용하기 힘들 때 사용
import java.util.*;
import java.text.*;
class ChoiceFormat {
public static void main(String[] args) {
double[] limits = {60, 70, 80, 90}; // 낮은 값부터 큰 값의 순서로 적어야한다.
String[] grades = {"D", "C", "B", "A"}; // limits, grades간의 순서와 개수를 맞추어야 한다.
int[] scores = { 100, 95, 88, 70, 52, 60, 70};
ChoiceFormat form = new ChoiceFormat(limits, grades);
/*
* 60~69, 70~79, 80~89, 90~ 의 범위가 지정됨
*/
}
}
패턴 구분자 #은 경곗값을 포함하고 <는 포함하지 않는다.
예를 들어 String pattern = "60#D|70#c|80<B|90#A";
가 있다면
90의 값은 A 이지만, 80은 B가 아닌 C 이다.
데이터를 정해진 양식에 맞게 출력한다.
import java.util.*;
import java.text.*;
class MessageFormat {
public static void main(String[] args) {
String msg = "Name: {0} \nTel: {1} \nAge:{2} \nBirthday:{3}";
Object[] arguments = {
"홍길동","02-123-1234", "26", "03-17"
};
String result = MessageFormat.format(msg, arguments);
System.out.println(result);
}
}
Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공한다. (JDK1.8)
시간은 LocalTime클래스, 날짜는 LocalDate클래스, 날짜와 시간 모두는 LocalDateTime클래스를 사용한다.
java.time 패키지의 가장 기본이 되는 클래스이며, 나머지 클래스들은 이들의 확장이다.
now( )는 현재 날짜 시간을, of( )는 특정 날짜 시간을 지정할 때 사용한다.
LocalDate today = LocalDate.now(); //오늘의 날짜
LocalDate now = LocalTime.now(); //현재 시간
LocalDate birthDate = LocalDate.of(1999, 12, 31); // 1999년 12월 31일
LocalTime birthTime = LocalTime.of(23, 59, 59); //23tl 59분 59초
특정 필드의 값을 get() 메서드를 통해 가져올 수 있다.
클래스 | 메서드 | 설명 |
---|---|---|
LocalData | int getYear() int getMonthValue() Month getMonth() int getDayOfMonth() int getDayOfYear() DayOfWeek getDayOfWeek() int lengthOfMonth() int lengthOfYear() boolean isLeapYear() | 년도(1999) 월(12) 월(DECEMBER) getMonth().getValue() = 12 일(31) 같은 해의 1월 1일부터 몇번째 일(365) 요일(FRIDAY) getDayOfWeek().getValue() = 5 같은 달의 총 일수(31) 같은 해의 총 일수 윤년 여부 확인 |
LocalTime | int getHour() int getMinute() int getSecond() int getNano() | 시(23) 분(59) 초(59) 나노초(0) |
Period는 날짜의 차이를, Duration은 시간의 차이를 계산하기 위한 것이다.
두 날짜 또는 시간의 차이를 구할 때는 between( )을 사용한다.
// 두 날짜의 차이 구하기
LocalDate date1 = LocalDate.of(2020, 1, 6);
LocalDate date2 = LocalDate.of(2019, 12, 25);
Period pe = Period.between(date1, date2);
// 두 시각의 차이 구하기
LocalTime time1 = LocalTime.of(00,00,00);
LocalTime time2 = LocalTime.of(12,34,56);
Duration du = Duration.between(time1, time2);
날짜를 plus(), minus() 메서드를 통해 간단한 계산을 할 수 있지만, 디테일한 계산은 불편하기때문에 자주 쓰일만한 날짜 계산을 정의해 놓은 클래스이다.
메서드 | 설명 |
---|---|
firstDayOfNextYear() | 다음 해의 첫 날 |
firstDayOfNextMonth() | 다음 달의 첫 날 |
firstDayOfYear() | 올 해의 첫 날 |
lastDayOfYear() | 이번 달의 첫 날 |
lastDayOfMonth() | 이번 달의 마지막 날 |
firstInMonth(DayOfWeek dayOfWeek) | 이번 달의 첫 번째 ?요일 |
lastIntMonth(DayOfWeek dayOfWeek) | 이번 달의 마지막 ?요일 |
previous(DayOfWeek dayOfWeek) | 지난 ?요일(당일 제외) |
previousOrSame(DayOfWeek dayOfWeek) | 지난 ?요일(당일 포함) |
next(DayOfWeek dayOfWeek) | 다음 ?요일(당일 제외) |
next(DayOfWeek dayOfWeek) | 다음 ?요일(당일 포함) |
dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek) | 이번 달의 n번째 ?요일 |