티스토리 뷰

프로그래밍/Java

날짜 구하기

안싱미 2016. 1. 28. 10:27

컴퓨터는 1970년 1월 1일 0시 0분 0초 부터 흘러온 시간을 계산한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
package com.ktds.smahn;
 
public class DateTime {
 
    public void start(){
        
        // 현재 시간 가져오기
        printCurrentMilliSecond();
        
    }
    
    private void printCurrentMilliSecond() {
        long currentSecond = System.currentTimeMillis(); // 시간은 long으로 가져온다.
        System.out.println(currentSecond); //1970년 1월 1일 0시 0분 0초 부터 흘렀던 시간
        
    }
 
    public static void main(String[] args) {
        
        DateTime dateTime = new DateTime();
        dateTime.start();
        
    }
    
}
 
cs

그러면 표준시, 우리나라에 맞는 시간을 구하려면 아래와 같이 한다. 그러나 이런 방식은 안쓰는게 좋다. 보통 서버는 국내에 없고 독일에 많이 있다. 전 세계적으로 제일 free한 곳이 독일이여서, date를 쓰면 독일 시간이 나오기 때문에 안되는 것이다.

그러나 System.currentTimeMillis(); 는 많이 사용한다. 시간차를 구할 때 많이 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
package com.ktds.smahn;
 
import java.util.Date;
 
public class DateTime {
 
    public void start(){
        
        // 현재 시간 가져오기
        printCurrentMilliSecond();
        
        //현재 날짜와 시간을 출력하기
        printcurrentDateTime();
    }
 
    private void printCurrentMilliSecond() {
        long currentSecond = System.currentTimeMillis(); // 시간은 long으로 가져온다.
        System.out.println(currentSecond); //1970년 1월 1일 0시 0분 0초 부터 흘렀던 시간
        
    }
    
    private void printcurrentDateTime() {
        
        Date date = new Date();
        System.out.println(date.toLocaleString()); //toLocalString : 우리나라에 맞는 시간
        System.out.println(date.toGMTString());//toGMTString : 표준시
        
    }
 
    public static void main(String[] args) {
        
        DateTime dateTime = new DateTime();
        dateTime.start();
        
    }
    
}
 
cs
출력결과

1453945204055
2016. 1. 28 오전 10:40:04
28 Jan 2016 01:40:04 GMT


그래서 사용하는게 바로 Calendar이다.

캘린더에는 달력을 만들 수 있는 위한 모든 정보가 다 들어있다.(휴일 빼고!) 우리가 인터넷에서 보는 달력 정보는 Calendar가지고 만든 것이다.

Calendar를 쓰는 경우는 검색할 때 게시판에서 필수로 들어가는 것이 날짜 검색이다. 2015년 1월 1일부터 2015년 12월 31일까지 데이터를 모두 검색해라. 라고 할 수 있다.

현재 시간부터 5분 뒤를 구하고 싶다.

5분 = 60초 X 5 = 300초

1시간 = 60초 X 60 X 1

2시간 =  60초 X 60 X 2

하루 = 60초 X 60분 X 24시간 X 1

이틀 = 60초 X 60분 X 24시간 X 2

한달 =  60초 X 60분 X 24시간 X (큰달, 작은달, 윤달)

-> 한달이 30일이라고 치고 어림잡아는 계산할 수 있지만, 정확하게 계산할 수 없다.

시작 시간, 마침 시간을 안다면 그 사이의 범위를 알 수 있다.

1년 =  60초 X 60분 X 24시간 X 365일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
 
package com.ktds.smahn;
 
import java.util.Calendar;
import java.util.Date;
 
public class DateTime {
 
    public void start(){
        
        // 현재 시간 가져오기.
        printCurrentMilliSecond();
        
        // 현재 날짜와 시간을 출력한다.
        printcurrentDateTime();
        
        // 현재 날짜와 시간을 출력한다.
        printCurrentDateTimeByCalendar();
        
        // 원하는 날짜와 시간을 출력한다.
        printDateTimeByCalendar();
        
        // 현재 시간부터 원하는 날짜까지 차이를 구한다.
        printDateMinusDate();
        
        //현재 시간부터 몇월 몇일 뒤 그 날짜를 구한다.
        printTwoDaysAfter();
        
    }
 
 
    private void printCurrentMilliSecond() {
        long currentSecond = System.currentTimeMillis(); // 시간은 long으로 가져온다.
        System.out.println(currentSecond); //1970년 1월 1일 0시 0분 0초 부터 흘렀던 시간
        
    }
    
    private void printcurrentDateTime() {
        
        Date date = new Date();
        System.out.println(date.toLocaleString()); //toLocalString : 우리나라에 맞는 시간
        System.out.println(date.toGMTString());//toGMTString : 표준시
        
    }
    
    private void printCurrentDateTimeByCalendar() {
        
//        Calendar now = new Calendar(); // 이렇게 쓰면 에러가 난다.
        Calendar now = Calendar.getInstance();
        System.out.println(now.toString());
        System.out.println();
        System.out.println(now.get(Calendar.YEAR));
        System.out.println(now.get(Calendar.MONTH) + 1);
        System.out.println(now.get(Calendar.DAY_OF_MONTH));
        System.out.println(now.get(Calendar.AM_PM));
        System.out.println(now.get(Calendar.HOUR));
        System.out.println(now.get(Calendar.HOUR_OF_DAY));
        System.out.println(now.get(Calendar.MINUTE));
        System.out.println(now.get(Calendar.SECOND));
        System.out.println(now.get(Calendar.MILLISECOND));
        System.out.println(now.get(Calendar.DAY_OF_WEEK));
        System.out.println(now.getActualMaximum(Calendar.DAY_OF_MONTH));
    }
 
 
 
    private void printDateTimeByCalendar() {
        Calendar cal = Calendar.getInstance();
        
        // 내가 주고 싶은 월에서 1을 빼야한다. 
        cal.set(2016, (2-1), 14105945);
        System.out.println();
        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.get(Calendar.MONTH) + 1);
        System.out.println(cal.get(Calendar.DAY_OF_MONTH));
        System.out.println(cal.get(Calendar.AM_PM));
        System.out.println(cal.get(Calendar.HOUR));
        System.out.println(cal.get(Calendar.HOUR_OF_DAY));
        System.out.println(cal.get(Calendar.MINUTE));
        System.out.println(cal.get(Calendar.SECOND));
        System.out.println(cal.get(Calendar.MILLISECOND));
        System.out.println(cal.get(Calendar.DAY_OF_WEEK));
        System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        
    }
    
    private void printDateMinusDate() {
        
        Calendar now = Calendar.getInstance();    
        
        Calendar cal = Calendar.getInstance();
        cal.set(2016, (2-1), 14105945);
        
        long dateTime1 = now.getTimeInMillis();
        long dateTime2 = cal.getTimeInMillis();
        
        System.out.println();
        System.out.println("dateTime1 : " + dateTime1);
        System.out.println("dateTime2 : " + dateTime2);
        
        long result = (dateTime2 - dateTime1) / 1000;
        System.out.println("dateTime2 - dateTime1 : " + result);
        
        int date = (int) Math.round((double)result / 60 / 60 / 24);
        // .round는 long을 리턴한다. int로 캐스팅하면 17.
        System.out.println("일자 : " + date);
        
        int hour = (int) Math.round((double)result / 60 / 60);
        System.out.println("시간 : " + hour);
        
        
        int minute = (int) Math.round((double)result / 60 );
        System.out.println("분 : " + minute);
        
        System.out.println("남은시간 : " + date + "일 " + minute % 60 + "분");
    }
 
    private void printTwoDaysAfter() {
        
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, 3);
        cal.add(Calendar.MONTH, -1);
        
        System.out.println();
        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.get(Calendar.MONTH) + 1);
        System.out.println(cal.get(Calendar.DAY_OF_MONTH));
        System.out.println(cal.get(Calendar.AM_PM));
        System.out.println(cal.get(Calendar.HOUR));
        System.out.println(cal.get(Calendar.HOUR_OF_DAY));
        System.out.println(cal.get(Calendar.MINUTE));
        System.out.println(cal.get(Calendar.SECOND));
        System.out.println(cal.get(Calendar.MILLISECOND));
        System.out.println(cal.get(Calendar.DAY_OF_WEEK));
        System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        
    }
    
    public static void main(String[] args) {
        DateTime dateTime = new DateTime();
        dateTime.start();
    }
 
}
 
        
cs
출력결과

1453947598356
2016. 1. 28 오전 11:19:58
28 Jan 2016 02:19:58 GMT
java.util.GregorianCalendar[time=1453947598382,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=22,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2016,MONTH=0,WEEK_OF_YEAR=5,WEEK_OF_MONTH=5,DAY_OF_MONTH=28,DAY_OF_YEAR=28,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=19,SECOND=58,MILLISECOND=382,ZONE_OFFSET=32400000,DST_OFFSET=0]

2016
1
28
0
11
11
19
58
382
5
31

2016
2
14
0
10
10
59
45
382
1
29

dateTime1 : 1453947598383
dateTime2 : 1455415185383
dateTime2 - dateTime1 : 1467587
일자 : 17
시간 : 408
분 : 24460
남은시간 : 17일 40분

2015
12
31
0
11
11
19
58
383
5
31


'프로그래밍 > Java' 카테고리의 다른 글

String 클래스  (0) 2016.01.29
대출 이자 계산기  (0) 2016.01.28
[Java 종합실습문제] 자전거 대여점  (0) 2016.01.28
이클립스 단축키 모음  (0) 2016.01.28
[Java 종합실습문제] 비행기 좌석 시스템  (0) 2016.01.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함