Calendar 의 두번째 예제다. 이번에는 요일을 숫자에서 한글로 매치시키는 것과 두 날짜간의 연산을 해보겠다.
날짜간의 연산은 MS의 엑셀에도 들어있다. 자바 프로그래밍을 다루게 되면 그보다 더 많은 연산을 할 수 있다.
우선 일,월,화,수,목,금,토를 배열로 저장한다. dayKor[1] = \’일\’ 이런 식으로 저장되면 Calendar 클래스의 get(Calendar.DAY_OF_WEEK] 으로 나온 숫자와 매치가 된다. 일요일부터 토요일까지 1부터 7까지다.
Calendar 형 인스턴스를 2개를 만들면 두 날짜간 연산을 할 수 있다. 그런데 둘이 날짜가 같으니까 한쪽을 다른 날짜로 바꿔줘야 한다. set메소드로 날짜를 바꿀 수 있다.
set 메소드를 사용해서 날짜를 분과 초까지 설정가능하다.
import java.awt.Font;
import java.util.Calendar;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class CalendarEX2 extends JFrame{
Font f1;
CalendarEX2(){
final String[] dayKor = {\"\",\"일\",\"월\",\"화\",\"수\",\"목\",\"금\",\"토\"};
f1 = new Font(\"배달의민족 도현\",Font.PLAIN,30);
// today
Calendar date1 = Calendar.getInstance();
// that day
Calendar date2 = Calendar.getInstance();
date2.set(2020, 0, 1, 0, 0, 0);
JLabel lb1 = new JLabel();
lb1.setBounds(50, 100, 600, 40);
lb1.setFont(f1);
String t1 =\"오늘은 \" date1.get(Calendar.YEAR) \"년 \" (date1.get(Calendar.MONTH) 1)
\" 월 \" date1.get(Calendar.DAY_OF_MONTH) \" 일 \"
dayKor[date1.get(Calendar.DAY_OF_WEEK)] \"요일입니다\";
lb1.setText(t1);
long dif1 = (date1.getTimeInMillis() - date2.getTimeInMillis())/1000; // 초단위 환산
long day = dif1/(60*60*24); //초를 일로 바꿈
// JTextField
JTextField tf1 = new JTextField();
tf1.setBounds(50, 180, 450, 40);
tf1.setFont(f1);
String t3 = \" 올해도 벌써 \" day \" 일이 지났다\";
tf1.setText(t3);
System.out.println(day);
// JFrame
add(lb1);add(tf1);
setTitle(\"Calendar Example\");
setSize(700,500);
setLayout(null);
setVisible(true);
}
public static void main(String[] args) {
new CalendarEX2();
}
}
이제 두 날짜 사이에 연산을 할 수 있다. millisecond로 받는다. 밀리세컨드는 1000분의 1초다. 그런데 무슨 숫자를 받는걸까? Javadoc에 의하면 epoch 타임에서 부터 계산된 값이라고 한다. JDK에서 그 설정 시간은 1970년이라고 설정되있다. 즉 1970년부터 오늘까지의 시간을 1000분의 1초로 리턴한다. 오늘이 2020년 7월27일이고 2020년1월1일0시를 기준으로 또 하나의 날짜를 설정한후 서로 빼면 차이가 나온다. 밀리세컨드니까 1000을 나누면 그 값이 18,025,707초이다. 이 숫자를 (60*60*24)로 나누면 며칠이 차이가 나는지 나온다. 208일이라고 나온다.
어쨋든 좋다. 날짜의 조작은 생각보다 익숙하지 않을지도 모른다. 시간의 진법인 60진법 12진법, 요일의 7진법 달력의 30진번이 나와서 헷갈리기 때문이다. 진법이 복잡한 건 우리 인생이 소중하기 때문인지도 모른다.
시간은 금이라고 한다. 자바JDK에서 시간을 마스터 하는 것은 기본이다.
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
Calendar (Java Platform SE 7 )
Adds or subtracts (up/down) a single unit of time on the given time field without changing larger fields. For example, to roll the current date up by one day, you can achieve it by calling: roll(Calendar.DATE, true). When rolling on the year or Calendar.YE
docs.oracle.com
相关推荐
Calendar 클래스 예제 1 | 자바 JDK | 날짜와 시간 사용하기
Calendar 클래스 예제 3 | 자바 JDK | 시간을 연산, 시분초 단위로
자바 튜토리얼 (9-3) 인터페이스 다중 구현, 상속
자바 튜토리얼 (10-1) Java Swing JFrame 윈도우창 만들기
자바 튜토리얼 (10-2) Java Swing JButton, JLabel
자바 튜토리얼 (10-3) Java Swing JTextField, JTextArea 예제
자바 튜토리얼 (10-4) Java Swing | 로그인창 예제,JPasswordField
Calendar 클래스 예제 4 | 자바 JDK | 날짜 연산, 달력만들기(콘솔)
最新评论
嗨,这是一条评论。 要开始审核、编辑及删除评论,请访问仪表盘的“评论”页面。 评论者头像来自Gravatar。