1. 날짜와 시간
1.1 Calendar와 Date
Calendar는 추상클래스이기 때문에 직접 객체 생성할 수 없고, 메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 한다.
Calendar cal = Calendar.getInstance();
//Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
Date d = new Date(cal.getTimeInMillis());
//Date를 Calendar로 변환
Date d = new Date();
Calendar cal = Calendar.getInstace();
cal.setTime(d)
주의할 점: get(Calendar.MONTH)로 얻어오는 값의 범위가 1~12가 아닌 0~11이다,
2. 형식화 클래스
2.1 DecimalFormat
Format | 설명 |
0 | 10진수, 값이 없는 자리는 0으로 채움 |
# | 10진수, 값이 없는 자리는 나타나지 않음 |
. | 소수점을 이하 나타냄 |
- | 음수 부호를 나타냄 |
, | 단위 구분자를 나타냄 |
E | 지수 기호를 나타냄, E 이후 0를 써서 표현(ex E0) |
% | 퍼센트 기호 |
' | escape문자, 만약 #을 문자로 나타내고 싶다면 '#' 으로 표현 |
그외 문자 | 문자로 취급 |
import java.text.*;
class DecimalFormatEx2{
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("#,###.##");
DecimalFormat df2 = new DecimalFormat("#.###E0");
try{
Number num = df.parse("1,234,567.89");
System.out.print("1,234,567.89" + "->");
double d = num.doubleValue();
System.out.print(d + "->");
System.out.println(df2.format(num));
} catch (Exception e){}
}
}
2.2 SimpleDateFormat
문자 | 날짜 및 시간 요소 | 표시 | 예제 |
G | Era designator | Text | AD |
y | Year | Year | 1996; 96 |
Y | Week year | Year | 2009; 09 |
M | Month in year (context sensitive) | Month | July; Jul; 07 |
L | Month in year (standalone form) | Month | July; Jul; 07 |
w | Week in year | Number | 27 |
W | Week in month | Number | 2 |
D | Day in year | Number | 189 |
d | Day in month | Number | 10 |
F | Day of week in month | Number | 2 |
E | Day name in week | Text | Tuesday; Tue |
u | Day number of week (1 = Monday, ..., 7 = Sunday) | Number | 1 |
a | Am/pm marker | Text | PM |
H | Hour in day (0-23) | Number | 0 |
k | Hour in day (1-24) | Number | 24 |
K | Hour in am/pm (0-11) | Number | 0 |
h | Hour in am/pm (1-12) | Number | 12 |
m | Minute in hour | Number | 30 |
s | Second in minute | Number | 55 |
S | Millisecond | Number | 978 |
z | Time zone | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z | Time zone | RFC 822 time zone | -0800 |
X | Time zone | ISO 8601 time zone | -08; -0800; -08:00 |
import java.util.*;
import java.text.*;
class DateFormatEx2{
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(2005, 9, 3);
Date day = cal.getTime();
SimpleDateFormat sdf1, sdf2, sdf3, sdf4;
sdf1 = new SimpleDateFormat("yyyy-MM-dd");
sdf2 = new SimpleDateFormat("yy-MM-dd E요일");
sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
sdf4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
System.out.println(sdf1.format(day));
System.out.println(sdf2.format(day));
System.out.println(sdf3.format(day));
System.out.println(sdf4.format(day));
}
}
2.3 ChoiceFormat
특정 범위에 속하는 값을 문자열로 변환해준다.
import java.text.*;
class ChoiceFormatEx1{
public static void main(String[] args) {
double[] limits = {60, 70, 80, 90};
String[] grades = {"D", "C", "B", "A"};
int[] scores = {100, 95, 88, 70, 52, 60, 70};
ChoiceFormat form = new ChoiceFormat(limits, grades);
for(int i = 0; i<scores.length;i++){
System.out.println(scores[i]+":"+form.format(scores[i]));
}
}
}
2.4 MessageFormat
데이터를 정해진 양식에 맞게 출력할 수 있도록 도와준다.
import java.text.*;
class MessageFormatEx1{
public static void main(String[] args) {
String msg = "Name: {0} \nTel: {1} \nAge:{2} \nBirthday:{3}";
Object[] arguments = {
"이자바","02-123-1234","27","07-09"
};
String result =
MessageFormat.format(msg, arguments);
System.out.println(result);
}
}
3. Java.time 패키지
3.1 java.time 패키지의 핵심 클래스
시간을 표현 Localtime클래스, 날짜 표현 LocalDate 클래스, 모두 필요시 LocalDateTime클래스, 시간대 다뤄야 하면 ZoneDateTime클래스를 사용한다. Calendar는 날짜와 시간 시간대까지 모두 가지고 있다.
두 날짜간의 차이를 표현하려면 Period, 시간의 차이는 Duration
Java.time패키지에 속한 클래스의 객체를 생성하는 방법은 now()와 of()를 사용하는 것이다.
3.2 LocalDate와 LocalTime
일 단위나 초 단위로도 지정할 수 있다.
날짜와 시간에서 특정 필드값을 변경하려면, with로 시작하는 메서드를 사용하면 된다. 특정 필드에 값을 더하거나 빼려면 plus()와 minus()가 있다.
isEqual()를 제공하는 이유는 연표가 다른 두 날짜를 비교하기 위해서이다. 모든 필드가 일치해야 하는 equals와는 달리 isEqual()은 오직 날짜만 비교한다.
3.3 Instant
에포크 타임부터 경과된 시간을 나노초 단위로 표현한다.
3.4 LocalDateTime과 ZoneDateTime
LocalDate + LocalTime = LocalDateTime
LocalDateTime + 시간대 = ZonedDateTime
-ZoneOffset
UTC로부터 얼마만큼 떨어져 있는지를 표현한다.
3.5 TemporalAdjusters
자주 쓰일만한 날짜 계산들을 대신 해주는 메서드를 정의해놓은 것이 TemporalAdjusters클래스이다.
LocalDate today = LocalDate.now();
LocalDate nextMonday = today.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
3.6 Period와 Duration
날짜 – 날짜 = Period
시간 – 시간 = Duration
Period는 between()으로 얻을 수 있다.
until()은 between()과 거의 같은 일을 한다. Between()은 static메서드이고, until()은 인스턴스 메서드라는 차이가 있다.
Period와 Duration의 변환 메서드
3.7 파싱과 포맷
날짜와 시간을 원하는 형식으로 출력하고 해석(파싱)
'공부기록 > 자바의 정석' 카테고리의 다른 글
[Java의 정석] 11. 컬렉션 프레임웍 (0) | 2022.06.28 |
---|---|
[Java의 정석] 9. java.lang패키지와 유용한 클래스 (0) | 2022.06.17 |
[Java의 정석] 8. 예외처리 exception handling (0) | 2022.05.22 |
[Java의 정석] 7. 객체지향 프로그래밍2 (0) | 2022.05.08 |
[Java의 정석]6. 객체지향 프로그래밍1 (0) | 2022.05.01 |