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시간 뭉개기 > 강의내용정리' 카테고리의 다른 글
[자바] 8일차 - 클래스 상속, 오버라이딩, super VS this, 추상클래스, 비정형인자, 래퍼클래스, final 키워드 (0) | 2012.08.03 |
---|---|
[자바] 7일차 - 클래스의 특징, 멤버, 접근지정자, 생성자, 정적멤버 vs 객체멤버 (0) | 2012.08.03 |
[자바] 5일차 - for문과 유효성검사, while, do-while, Random, StringBuffer (0) | 2012.07.31 |
[자바] 4일차 - 재귀메서드, 메서드오버로딩, String, value VS reference, 제어문 (0) | 2012.07.31 |
[자바] 3일차 - 연산자, 메서드, 변수 (0) | 2012.07.27 |