organize/자바

Java 21

001cloudid 2024. 5. 6. 23:06
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

'organize > 자바' 카테고리의 다른 글

Java 23  (0) 2024.05.08
Java 22  (0) 2024.05.07
Java 20  (0) 2024.05.05
Java 19  (0) 2024.05.04
Java 18  (0) 2024.05.03