728x90
※필드 읽기 get(), 필드 변경 set, 필드 초기화 clear()
- add()
특정 필드의 값을 증가 또는 감소(일, 월로 하여금 월, 년이 변경됨)
Calendar dateAdd = Calendar.getInstance();
dateAdd.clear(); //모든 필드 초기화
dateAdd.set(2024, 4, 6); //2024년 5월 6일로 설정
dateAdd.add(Calendar.DATE,1); //날짜(DATE)에 1을 더함
dateAdd.add(Calendar.MONTH, -4); //월(MONTH)에서 4을 뺌
- roll()
특정 필드의 값을 증가 또는 감소(일, 월로 하여금 월, 년이 변경되지 않음)
//roll() 특정 필드의 값을 증가 또는 감소(일로 하여금 월이 변경되지 않음)
Calendar dateRoll = Calendar.getInstance();
dateRoll.clear(); //모든 필드 초기화
dateRoll.set(2024, 4, 6); //2024년 5월 6일로 설정
dateRoll.roll(Calendar.DATE,-7); //날짜(DATE)에 1을 더함
dateRoll.roll(Calendar.MONTH, -4); //월(MONTH)에서 4을 뺌
package chapter10;
import java.util.Calendar;
public class Study03Ex1 {
public static String toString(Calendar date) {
return date.get(Calendar.YEAR) + "년 " + (date.get(Calendar.MONTH)+1) + "월 " + date.get(Calendar.DATE) + "일";
}
public static void main(String[] args) {
System.out.println("set() 메서드");
Calendar date = Calendar.getInstance();
date.set(2024, 3, 30);
System.out.println(toString(date)); //2024년 4월 30일
date.add(Calendar.DATE, 1);
System.out.println("1일 후 => " + toString(date)); //2024년 5월 1일
date.add(Calendar.MONTH, -5);
System.out.println("5개월 전 => " + toString(date)); //2023년 12월 1일
System.out.println();
System.out.println("roll() 메서드");
date.roll(Calendar.DATE, 31);
System.out.println("31일 후 => " + toString(date)); //2023년 12월 1일
date.roll(Calendar.MONTH, 3);
System.out.println("3개월 후 => " + toString(date)); //2023년 3월 1일
}
}
package chapter10;
import java.util.Calendar;
public class Study03Ex2 {
public static void main(String[] args) {
//Run - Run configuration으로 실행해야함
if(args.length != 2) {
System.out.println();
return;
}
int year = Integer.parseInt(args[0]);
int month = Integer.parseInt(args[1]);
int START_DAY_OF_WEEK = 0; //1일의 요일
int END_DAY = 0;
Calendar startDay = Calendar.getInstance(); //시작일
Calendar endDay = Calendar.getInstance(); //끝일
startDay.set(year, month-1, 1); //월의 경우 0부터 11의 값을 가지므로 1을 빼줘야함
endDay.set(year, month, 1);
endDay.add(Calendar.DATE, -1); //다음날 1일에서 하루를 빼면 현재 달(month)의 마지막 날
START_DAY_OF_WEEK = startDay.get(Calendar.DAY_OF_WEEK); //첫 번째 요일이 무슨 요일인지 알아냄
END_DAY = endDay.get(Calendar.DATE);
System.out.println(year + "년 " + month + "월");
System.out.println(" 일 월 화 수 목 금 토");
//해당 월의 1일이 어느 요일인지에 따라서 공백을 출력
//만일 1일이 수요일이라면 공백을 3번 찍는다.
for(int i=1;i < START_DAY_OF_WEEK ;i++) {
System.out.print(" ");
}
for(int i = 1, n = START_DAY_OF_WEEK; i <= END_DAY; i++, n++) {
System.out.print((i<10)? " " + i : " "+i);
if(n%7==0)
System.out.println();
}
//1. 마지막 날 구하기 다음날 1일 - 1일
//2. 1일의 요일 구하기
}
}
Date와 Calendar간의 변환
Date 메서드는 사용하지 않는 것을 권장하고 있으나 여전히 많이 사용함.
따라서 두 클래스 간의 변환방법을 알아둬야함
//1. Calendar -> Date로 변환
Calendar cal1 = Calendar.getInstance();
Date d1 = new Date(cal1.getTimeInMillis());
//2. Date를 Calendar로 변환
Date d2 = new Date();
Calendar cal2 = Calendar.getInstance();
cal2.setTime(d2);
형식화 클래스
java.text 패키지의 DecimalFormat, SimpleDateFormat
숫자와 날짜를 원하는 형식으로 쉽게 출력 가능(숫자, 날짜 -> 형식 문자열)
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0"); //지수 형식 표현
String dfString = df.format(number);
System.out.println(dfString); //1.2E6
형식 문자열에서 숫자와 날짜를 뽑아내는 기능(형식 문자열 -> 숫자, 날짜)
DecimalFormat df1 = new DecimalFormat("#,###.##");
Number num = df1.parse("1,234,567.89"); //예외처리해줘야함
double d = num.doubleValue();
System.out.println(d); //1234567.89
DecimalFormat
- 숫자(10진수)를 형식화할 때 사용(숫자 -> 형식 문자열)
패턴 0(10진수, 값이 없을 때는 0으로 채움), #(10진수), E(지수기호) - 특정 형식의 문자열을 숫자로 변환할 때도 사용(형식 문자열 -> 숫자)
- ※Integer.parseInt()는 콤마(,)가 포함된 문자열을 숫자로 변환하지 못함
package chapter10;
import java.text.DecimalFormat;
public class Study04Ex2 {
public static void main(String[] args){
double number = 1234567.89;
String[] pattern = {
"0",
"#",
"0.0",
"#.#",
"0000000000.0000",
"##########.####",
"#.#-",
"-#.#",
"#,###.##",
"#,####.##",
"#E0",
"0E0",
"##E0",
"00E0",
"####E0",
"0000E0",
"#.#E0",
"0.0E0",
"0.000000000E0",
"00.00000000E0",
"000.0000000E0",
"#.#########E0",
"##.########E0",
"###.#######E0",
"#,###.##+;#,###.##-",
"#.#%",
"#.#\u2030",
"\u00A4 #,###",
"'#'#,###",
"''#,###",
};
for(int i=0; i < pattern.length; i++) {
DecimalFormat df = new DecimalFormat(pattern[i]);
System.out.printf("%19s : %s\n",pattern[i], df.format(number));
}
}
}
package chapter10;
import java.text.DecimalFormat;
public class Study04Ex3 {
public static void main(String[] args){
DecimalFormat df1 = new DecimalFormat("#,###.##");
DecimalFormat df2 = new DecimalFormat("#.###E0");
try {
Number num = df1.parse("1,234,567.89");
System.out.print("1,234,567.89 => "); //문자열
// System.out.print(Double.parseDouble("1,234,567.89")); //오류 ,값이 들어있는 문자열은 변경 불가
double d = num.doubleValue();
System.out.print(d + " => "); //숫자
System.out.println(df2.format(num)); //문자열
} catch (Exception e) {
// TODO: handle exception
}
}
}
SimpleDateFormat
- 날짜와 시간을 다양한 형식으로 출력할 수 있게 해줌
Date today = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //mm은 분을 뜻함
//오늘 날짜를 yyyy-MM-dd형태로 변환하여 반환
String todayResult = sdf.format(today);
System.out.println(todayResult);
※
G : 연대(BC,AD)
y : 년도
M : 월(1~12 또는 1월~12월)
w : 년의 몇 번째 주(1~53)
W : 월의 몇 번째 주(1~5)
D : 년의 몇 번째 일(1~366) 1월 1일부터
d : 월의 몇 번째 일(1~31)
F : 월의 몇 번째 요일(1~5)
E : 요일
- 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수 있음
DateFormat df1 = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
Date date = df1.parse("2024년 5월 6일"); //문자열을 Date로 변환. 예외 처리 필요함
String dateResult = df2.format(date);
System.out.println(dateResult); //2024/05/06
※
a : 오전/오후(AM,PM)
H : 시간(0~23), h : 시간(1~12), K(0~11), k(1~24)
m : 분(0~59)
s : 초(0~59), S : 천분의 일초(0~999)
Z : Time zone(RFC822 time zone), z : Time zone(General time zone)
' : 이스케이프문자(특수문자를 표현하는데 사용)
package chapter10;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Study05Ex1 {
public static void main(String[] args) {
Date today = new Date(); //현재의 시간과 날짜
SimpleDateFormat sdf1,sdf2,sdf3,sdf4, sdf5,sdf6,sdf7,sdf8, sdf9;
sdf1 = new SimpleDateFormat("yyyy-MM-dd");
sdf2 = new SimpleDateFormat("''yy년 MMM dd일 E요일");
sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
sdf4 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
sdf5 = new SimpleDateFormat("오늘은 올 해의 D번째 날");
sdf6 = new SimpleDateFormat("오늘은 이 달의 d번째 날");
sdf7 = new SimpleDateFormat("오늘은 올 해의 w번째 주");
sdf8 = new SimpleDateFormat("오늘은 이 달의 W번째 주");
sdf9 = new SimpleDateFormat("오늘은 이 달의 F번째 E요일");
System.out.println(sdf1.format(today));
System.out.println(sdf2.format(today));
System.out.println(sdf3.format(today));
System.out.println(sdf4.format(today));
System.out.println();
System.out.println(sdf5.format(today));
System.out.println(sdf6.format(today));
System.out.println(sdf7.format(today));
System.out.println(sdf8.format(today));
System.out.println(sdf9.format(today));
}
}
728x90