[자바] 6일차 - Calendar(시간 vs 시각), 배열(array) :: 소림사의 홍반장!

6일차


시간 VS 시각
 - 2012. 08. 01. 10:10:55" - 시각
 - 10일 2시간 30분 10초   - 시간

 - 시각 + 시각 (x)
 - 나중시각 - 이전시각 = 시간 (O)
  - 기준일로부터 초로 환산된 tick값을 가지고 계산.
 - 시각 + 시간 = 시각 (O)
 - 시각 - 시간 = 시각 (O)
 - 시간 + 시간 = 시간 (O)
 - 시간 - 시간 = 시간 (O)

 

tick값
 - System.currentTimeMillis() 로 얻어온다.
 - 현재시간을 1/1000초로 반환
 - 1970년 1월 1일 자정을 기준으로 누적된 시간.

** 시간관련 함수들은 java.util.Calendar에서 관리한다.

 

Calendar 클래스

import java.util.*;

class Ex57_Calendar 
{
	public static void main(String[] args)
	{
		// Ex57_Calendar.java
		// Date 클래스 (X)
		// Calendar 클래스 (O)

		// 캘린더객체를 생성.
		// 생성되는 시점의 시각이 c1에 들어있음.
		Calendar c1 = Calendar.getInstance();

		// get(이미 약속된 int)
		//System.out.println(c1.get(1));
		//System.out.println(Calendar.YEAR);

		System.out.println("YEAR : "+c1.get(Calendar.YEAR));
		System.out.println("MONTH : "+c1.get(Calendar.MONTH));//0~11
		System.out.println("DATE : "+c1.get(Calendar.DATE));
		System.out.println("HOUR : "+c1.get(Calendar.HOUR));
		System.out.println("HOUR_OF_DAY : "+c1.get(Calendar.HOUR_OF_DAY));//24h
		System.out.println("MINUTE : "+c1.get(Calendar.MINUTE));
		System.out.println("SECOND : "+c1.get(Calendar.SECOND));
		System.out.println("MILLISECOND : "+c1.get(Calendar.MILLISECOND));
		System.out.println("DAY_OF_WEEK : "+c1.get(Calendar.DAY_OF_WEEK));//1(일)~7(토)
		System.out.println("AM_PM : "+c1.get(Calendar.AM_PM));
		System.out.println("DAY_OF_YEAR : "+c1.get(Calendar.DAY_OF_YEAR));
		System.out.println("WEEK_OF_MONTH : "+c1.get(Calendar.WEEK_OF_MONTH));
		System.out.println("WEEK_OF_YEAR : "+c1.get(Calendar.WEEK_OF_YEAR));

		// 현재 c1이 나타내는 월의 마지막 일?
		int lastDay = c1.getActualMaximum(Calendar.DATE);
		System.out.println(lastDay+"일까지");

		// c1을 수정
		// 날짜를 15일로 바꾸기

		c1.set(Calendar.DATE, 15);		// 날짜-> 15
		c1.set(Calendar.MINUTE, 10);	//  분 -> 10

		System.out.println(c1.get(Calendar.DATE));
		System.out.println(c1.get(Calendar.MINUTE));

		c1.set(2000, 1, 20);	// 년,월,일 한번에 수정

		// 날짜, 시간 출력
		System.out.printf("%tF%n",c1);	// "2000-02-20"으로 출력
		System.out.printf("%tT%n",c1);	// "10:10:18"으로 출력
		System.out.printf("%tA%n",c1);	// "목요일"로 출력
		System.out.printf("%tr%n",c1);	// "10:10:18 오전"으로 출력
		System.out.printf("%tR%n",c1);	// "10:10"으로 출력
		
		// 날짜, 시간
		// 1. 시각

		Calendar c2 = Calendar.getInstance();
		c2.set(2000,10,20,12,30);

		//100일 뒤?
		c2.add(Calendar.DATE, 100); //수정
		System.out.printf("%tF%n",c2);

		//200일 전?
		c2.add(Calendar.DATE, -200); //수정
		System.out.printf("%tF%n",c2);

		//2시간 뒤?
		c2.add(Calendar.HOUR, 2); //수정
		System.out.printf("%tH%n",c2);

		// 2. 시각 - 시각 = 시간
		// 올해 크리스마스는 몇일 남았는지?

		Calendar now = Calendar.getInstance();	// 현재
		Calendar christmas = Calendar.getInstance();//크리스마스

		christmas.set(Calendar.MONTH, 11);//12월
		christmas.set(Calendar.DATE, 25);//25일

		// christmas - now;
		// 2번getTime시 tick값얻음
		// System.out.println(now.getTime().getTime()); 

		long span = christmas.getTime().getTime() -
			now.getTime().getTime();		// 흐른 시간(두시간의 차)

		System.out.printf("올해 크리스마스는 %d일 남았습니다.%n",span/1000/60/60/24);
	}//end main
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// "달력만들기" 2012.07 일 경우
// * 알아야할것
// 1. 월의 마지막 일자 = 31일
// 2. 월의 첫날의 요일 = 일요일

// 	기준값 ( 1년 1월 1일 -> 월요일 )
// 	같은 요일의 날짜들은 7로 나눈 나머지가 같다.
// 	기준일로 부터 누적일을 7로 나눈 나머지를 구하면 요일을 구할수 있다.

import java.util.*;

class Ex58_practiceCalendar 
{
	public static void main(String[] args)
	{
		// 1. 해당년,월의 마지막 일자?
		// 2. 해당년,월의 1일이 무슨 요일?

		// 2012년 8월 달력
		Calendar c1 = Calendar.getInstance();
		c1.set(2012, 7, 1);	// 2012년 8월 1일로 세팅!

		// 1.
		int lastDay = c1.getActualMaximum(Calendar.DATE);
//		System.out.println(lastDay);

		// 2.
		int index = c1.get(Calendar.DAY_OF_WEEK);
//		System.out.println(index);	// 4를 반환(수요일)

		// 3.
		// 헤더출력
		System.out.printf("                     %d월%n",c1.get(Calendar.MONTH)+1);
		System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%n",
			"일","월","화","수","목","금","토");
		System.out.println("----------------------------------------------------");

		// 1일이 일요일이 아닐 경우 앞에서 공백 확보
		for(int i=1; i<index; i++) {
			System.out.printf("\t");
		}

		// 1~마지막일까지 출력
		for(int i=1; i<=lastDay; i++) {
			System.out.printf("%2d\t",i);

			// 토요일을 출력하고 난 뒤 개행
			if((index + i - 1) % 7 == 0)
				System.out.println();
		}
		System.out.println();
	}

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

class Ex61_Array 
{
	public static void main(String[] args)
	{
		//Ex61_Array.java

		// 국어 점수 x 5개
		// 총점, 평균 구하라
/*
		int kor1, kor2, kor3, kor4, kor5;
		int total;	//총점
		double avg;	//평균

		kor1 = 100;
		kor2 = 90;
		kor3 = 75;
		kor4 = 89;
		kor5 = 93;

		total = kor1 + kor2 + kor3 + kor4 + kor5;
		avg = total / 5.0d;

		System.out.printf("국어 총점은 %d점이고, 평균은 %.1f점 입니다.%n", total,avg);
*/
//	--------------------------------------------------

		// 국어 점수 x 5개
		// 총점, 평균 구하라

		int total=0;	//총점
		double avg=0;	//평균

		// 배열선언
		int[] kors = new int[5];

		// 0 -> index, 첨자
		// 각 int방 -> 요소(Element)
		kors[0] = 100;	// int kor;
		kors[1] = 90;
		kors[2] = 75;
		kors[3] = 89;
		kors[4] = 93;

		for(int i=0; i<kors.length; i++) {
			total += kors[i];
		}
		avg = total / 5.0d;

		System.out.printf("국어 총점은 %d점이고, 평균은 %.1f점 입니다.%n", total,avg);
	}

}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
import java.io.*;
import java.util.*;

class Ex62_Array 
{
	public static void main(String[] args) throws IOException
	{
		// 국어점수 입력 -> 출력
		int[] kors = new int[10];	// index : 0 ~ 9

//		System.out.println(kors.length);	// 10; 길이반환

		BufferedReader reader = getReader();

		// 점수 입력
		for(int i=0; i<kors.length; i++) {
			System.out.printf("kors[%d] = ",i);
			kors[i] = Integer.parseInt(reader.readLine());	
		}
		System.out.println();

		// 총점, 평균
		int total = 0;
		double avg = 0.0;

		for(int i=0; i<kors.length; i++) {
			total += kors[i];
		}

		avg = (double)total / kors.length;
		System.out.printf("총점 : %d점, 평균 : %.1f점%n",total,avg);
	}

	public static BufferedReader getReader() {
		BufferedReader reader = 
			new BufferedReader(new InputStreamReader(System.in));

		return reader;
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////

import java.io.*;
import java.util.*;

class Ex63_Array 
{
	public static void main(String[] args) throws IOException
	{
		// 초기화 -> 출력
		String[] names = new String[3];

		names[0] = "가가가";
		names[1] = "나나나";
		names[2] = "다다다";

		// 1차원 배열의 탐색 -> for문
		for(int i=0; i 향상된 for문
		// names에서 첫번째 항목을 가져와서 s에 복사
		// names에서 두번째 항목을 가져와서 s에 복사
		// names에서 세번째 항목을 가져와서 s에 복사 ; 배열의 끝까지

		// 데이터의 읽기는 가능하나 쓰기는 불가.

		for( String result : names ) {
			System.out.println(result);
		}

	}

	public static BufferedReader getReader() {
		BufferedReader reader = 
			new BufferedReader(new InputStreamReader(System.in));

		return reader;
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Ex64_Array 
{
	public static void main(String[] args)
	{
		//Ex64_Array.java

		int n;
		n = 10; //초기화

		int m = 10; //초기화


		int[] ns1 = new int[5];
		ns1[0] = 10;
		ns1[1] = 20;
		ns1[2] = 30;
		ns1[3] = 40;
		ns1[4] = 50;

		for(int i=0; i< ns1.length; i++) {
			ns1[i] = (i+1) * 10;
		}

		// 배열의 초기화리스트
//		int[] ns2 = new int[] {100,200,300,400,500};	// (O)
		int[] ns2 = {100,200,300,400,500};		// (O)
	

		for( int result : ns2 ) {
			System.out.println(result);
		}


		double[] dlist = new double[] {1.1, 2.5, 3.8, 4.6};

		for(double d : dlist)
			System.out.println(d);


		boolean[] blist = new boolean[] {true,false,true,true,false};

		for(boolean b : blist)
			System.out.println(b);


		// 가능한 데이터형 모두 올 수 있음
		Random rnd = new Random();
		Random[] rndList = new Random[5];
	}

}


//////////////////////////////////////////////////////////////////////////////////////////////////////////

class Ex65_Array_shallowcopy
{
	public static void main(String[] args)
	{
		//Ex65_Array.java

		// 배열의 복사
		
		// 원본
		int[] nums = new int[] {10,20,30,40,50};

		// 복사본
		int[] copy;
		int n;
	
		// 참조형 변수끼리의 복사는 주소값 복사(*************)
		copy = nums;	// int[] = int[]
		n = nums[0];	// int = int

		nums[0] = 70;

		System.out.println(nums[0]);
		System.out.println(copy[0]);
		System.out.println(n);

		copy[0] = 200;

		System.out.println(nums[0]);
		System.out.println(copy[0]);
		System.out.println(n);

		n = 100;

		System.out.println(nums[0]);
		System.out.println(copy[0]);
		System.out.println(n);
	}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////

class Ex66_Array_withMethod 
{
	public static void main(String[] args)
	{
		//Ex66_Array_deepcopy.java

		// 매개변수가 값형 or 참조형
		// 1. 값형 : Side Effect가 없음
		// 2. 참조형 : Side Effect가 있다.
		//	( 메서드 안에서 값을 수정하면 원본도 수정)
		int[] nums = {10,20,30,40,50};
		int n = 10;

		test(nums, n);	// 인자(참조형, 값형)

		System.out.println(nums[0]);
		System.out.println(n);

		int[] temp = getArray();
		for(int m : temp)
			System.out.println(m);
	}

	public static void test(int[] nums, int n) {

		nums[0]++;	//11
		n++;		//11
	}

	public static int[] getArray() {
		int[] ns = new int[] {100,200,300};

		return ns;
	}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////		

class Ex68_Array_deepcopy
{
	public static void main(String[] args)
	{
		//Ex68_Array_deepcopy.java
		// 1. 주소값 복사 : 얕은 복사
		// 2. 내부배열 복사 : 깊은 복사

		// 원본
		int[] ns = {1,2,3};

		// 복사본
		int[] copy1 = ns;	// 얕은 복사

		int[] copy2 = copyArray(ns);	// 깊은 복사
		int[] copy3 = (int[])ns.clone(); // JDK - 깊은복사

		ns[0] = 1000;
		System.out.println(copy2[0]);
	}//end main

	public static int[] copyArray(int[] ns) {
		
		//원본과 동일한 자료형과 크기의 배열을 생성
		int[] temp = new int[ns.length];
		for(int i=0; i< ns.length; i++) {
			temp[i] = ns[i];	// int = int 값 복사
		}

		return temp;
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

class Ex69_Array_doubleArr
{
	public static void main(String[] args)
	{

		int[][] nums = new int[2][3];

		nums[0][0] = 10;
		nums[0][1] = 20;
		nums[0][2] = 30;
		nums[1][0] = 40;
		nums[1][1] = 50;
		nums[1][2] = 60;


		//2차원 배열의 탐색 -> 2중 for문
		for(int i=0; i< nums.length; i++) {

			for(int j=0; j< nums[i].length; j++) {
				System.out.println(nums[i][j]);
				}
		}
	}//end main
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

import java.io.*;
import java.util.*;

class Ex70_Array_subjectScoreProgram
{
	public static void main(String[] args) throws IOException
	{
		BufferedReader reader = getReader();

		// 학생수, 이름, 번호, 점수(국,영,수)
		// -> 총점, 평균

		// 1. 사용할 변수들 생성
		int count = 0;	//학생수
		String[] names;	//이름
		int[] nums;		//번호
		int[][] scores;	//점수
		int[] totals;	//총점
		double[] avgs;	//평균
		String[] title = {"국어","영어","수학"};

		// 2. 학생수 입력?
		System.out.print("학생수를 입력하세요 : ");
		count = Integer.parseInt(reader.readLine());

		// 3. 배열 생성
		names = new String[count];
		nums = new int[count];
		scores = new int[3][count];
		totals = new int[count];
		avgs = new double[count];

		// 4. 데이터 입력
		for(int i=0; i< count; i++) {
			
			// 번호(1~)
			nums[i] = i+1;
			System.out.println("==============");
			System.out.printf(" %d번 학생 정보입력%n",nums[i]);
			System.out.println("==============");

			System.out.print(" 이름 : ");
			names[i] = reader.readLine();

			//점수
			for(int j=0; j< title.length; j++) {
				System.out.printf(" %s 점수 : ",title[j]);
				scores[j][i] = Integer.parseInt(reader.readLine());

				// 총점
				totals[i] += scores[j][i];
			}//end j
		
		// 평균
		avgs[i] = totals[i] / title.length;

		}//end i

		// 5. 데이터 출력
		System.out.println();
		System.out.println("▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣");
		System.out.println("            성적표");
		System.out.println("▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣▣");
		
		// 번호, 이름, 국, 영, 수, 총점, 평균
		System.out.printf("%3s%5s%4s%4s%4s%6s%6s%n"
		,"번호", "이름", "국어", "영어", "수학", "총점", "평균");
		
		for(int i=0; i< count; i++) {
			System.out.printf("%3d",nums[i]);	//번호
			System.out.printf("%5s",names[i]);	//이름
			for(int j=0; j< title.length; j++) {
				System.out.printf("%4d",scores[j][i]);	//점수
			}
			System.out.printf("%6d",totals[i]);
			System.out.printf("%6.1f",avgs[i]);
			System.out.println();
		}
		
	}//end main

	public static BufferedReader getReader() {
		BufferedReader reader = 
			new BufferedReader(new InputStreamReader(System.in));

		return reader;
	}
}


다른 카테고리의 글 목록

Dev. 640시간 뭉개기/강의내용정리 카테고리의 포스트를 톺아봅니다