1. Date클래스와 유닉스 시간

Java의 맨 처음부터 언어에는 시간과 날짜 작업을 위한 특수 클래스가 있었습니다 Date. Date시간이 지남에 따라 날짜 작업을 위한 여러 클래스가 더 등장했지만 프로그래머는 오늘날에도 계속 클래스를 사용합니다 .

매우 간단하고 편리하기 때문입니다. 그리고 프로그래머로서 실제 프로젝트에서 확실히 접하게 될 것입니다. 사용 여부는 귀하의 선택이지만 반드시 알아야합니다. 소중한 시간을 몇 분만 투자하세요.

수업이 그렇게 좋은 이유는 무엇입니까 Date? 단순함.

이 클래스는 날짜 및 시간 정보 를 1970년 1월 1일 이후 경과된 밀리초 수로Date 저장합니다 . 이는 많은 밀리초이므로 유형을 사용하여 저장합니다.long

흥미로운.

구체적으로 1970년 이후의 이유는 무엇입니까? 이것이 소위 유닉스 시간 입니다 . 모든 현대 운영 체제의 조상인 유닉스 운영 체제가 시간을 유지하는 방식입니다.

그러나 두 날짜 사이에 얼마나 많은 시간이 흘렀는지 매우 쉽게 알 수 있습니다. 한 날짜에서 다른 날짜를 빼면 가장 가까운 밀리초까지 날짜 사이의 시차를 얻을 수 있습니다.

다음은 클래스 작업의 몇 가지 유용한 예입니다 Date.


2. 현재 날짜 얻기

현재 시간과 날짜를 얻으려면 간단히 Date객체를 만드십시오. 각각의 새 개체는 생성된 시간을 저장합니다. 매우 간단해 보입니다.

Date current = new Date();

이 명령을 실행한 후 current변수는 생성된 개체에 대한 참조를 저장하며 Date내부적으로 생성 시간(1970년 1월 1일 이후 경과된 밀리초 수)을 저장합니다.

화면에 현재 날짜 표시하기

현재 날짜를 표시하려면 a) 새 Date개체를 만들고 b) 메서드를 사용하여 화면에 인쇄합니다 System.out.println().

예:

암호 콘솔 출력
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

콘솔 출력의 의미는 다음과 같습니다.

텍스트 해석
목요일 _ 목요일
2월 21일 2월 21일
14:01:34 시 : 분 : 초
EET 시간대: 동유럽 표준시
2019년 년도

3. 특정 날짜 설정

현재 시간을 가져오는 방법을 알아냈지만 Date다른 날짜나 시간을 저장하는 개체를 만드는 방법은 무엇입니까?

다시 말하지만 여기에서는 모든 것이 간단합니다. 특정 날짜를 설정하려면 다음과 같은 코드를 작성해야 합니다.

Date birthday = new Date(year, month, day);

모든 것이 간단하고 명백하지만 알아야 할 두 가지 뉘앙스가 있습니다.

  1. 연도는 1900년부터 계산해야 합니다.
  2. 월은 0부터 번호가 매겨집니다.
흥미로운.

이것은 Unix 운영 체제의 또 다른 유산입니다. Unix에서 프로그래머는 두 자리 숫자를 사용하여 연도를 표시했습니다. 1977 대신에 그들은 단순히 77이라고 적었습니다. 따라서 1900에서 세면 77이 올바른 연도입니다.

예를 들어, 저는 1989년 3월 21일에 태어났습니다. 3월은 세 번째 달이므로 다음과 같이 작성해야 합니다.

암호 콘솔 출력
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

월은 0부터 번호가 매겨지지만 일은 그렇지 않습니다. 조금 이상하죠?

우리는 진정한 프로그래머가 우세하고 0부터 날짜를 매겨야 한다고 생각합니다. 오, 이 순응자들 🙂

특정 시간 설정

특정 시간을 설정하는 것도 매우 간단합니다. 이를 위해서는 다음과 같은 명령문을 작성해야 합니다.

Date birthday = new Date(year, month, day, hour, minutes, seconds);

시간, 분, 초는 0부터 번호가 매겨집니다. 내부의 프로그래머가 안도의 한숨을 쉬게하십시오.

예:

암호 콘솔 출력
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

시간을 12:15로 설정 하고 날짜를 2005년 6월 4일로 설정했습니다 . 이것은 프로그래머가 아닌 사람이 읽기에는 약간 어렵지만 예상대로 작동합니다.


4. 날짜 요소 작업

객체를 단순히 표시하는 것보다 더 많은 작업을 수행할 수 있습니다 Date. 내부적으로 저장된 날짜의 개별 요소를 가져올 수 있는 메서드가 있습니다 .

방법 설명
int getYear()
1900년을 기준으로 날짜의 연도를 반환합니다.
int getMonth()
날짜의 월을 반환합니다(월은 0부터 번호가 매겨짐).
int getDate()
해당 월의 날짜를 반환합니다.
int getDay()
요일을 반환
int getHours()
시간을 반환
int getMinutes()
분을 반환합니다.
int getSeconds()
초를 반환

예:

암호 콘솔 출력 메모
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current.getYear());
System.out.println(current.getMonth());
System.out.println(current.getDate());
System.out.println(current.getDay());

105
5
4
6

2005년
6월
요일
토요일

그런데 Date개체를 사용하면 날짜의 개별 요소를 가져올 수 있을 뿐만 아니라 변경할 수도 있습니다.

방법 설명
void setYear(int year) 날짜의 연도를 변경합니다. 연도는 1900년을 기준으로 표시됩니다.
void setMonth(int month) 날짜의 월을 변경합니다(월은 0부터 번호가 매겨짐).
void setDate(int date) 해당 월의 날짜를 변경합니다.
void setHours(int hours) 시간 변경
void setMinutes(int minutes) 의사록 변경
void setSeconds(int seconds) 초 변경

5. 밀리초

앞서 말했듯이 Date개체는 1970년 1월 1일 이후 경과된 밀리초 수를 저장합니다.

해당 번호가 필요한 경우 개체에서 가져올 수 있습니다 Date.

long time = date.getTime();

getTime()메서드는 개체 내부에 저장된 밀리초 수를 반환합니다 Date.

밀리초 수를 얻을 수 있을 뿐만 아니라 기존 개체에서 해당 숫자를 변경할 수도 있습니다.

Date date = new Date();
date.setTime(1117876500000L);

그건 그렇고, Date개체가 생성될 때 개체에 시간을 전달하여 이를 훨씬 더 간결하게 작성할 수 있습니다.

Date date = new Date(1117876500000L);

6. 날짜 비교

두 날짜를 비교하고 어느 날짜가 먼저인지 확인하려면 세 가지 옵션이 있습니다.

번째 방법은 단순히 각각이 저장하는 밀리초 수를 비교하는 것입니다.

if (date1.getTime() < date2.getTime())

번째 방법은before() 객체 의 메서드를 사용하는 것입니다 Date.

if (date1.before(date2))

다음과 같이 읽습니다. date1앞에 오면 date2...

번째 방법은after() 객체 의 메서드를 사용하는 것입니다 Date.

if (date2.after(date1))

다음과 같이 읽습니다. if date2is after date1, then...


7. DateFormat클래스

화면에 날짜를 표시했을 때 다음과 같은 내용이 표시되었음을 기억하십시오 Thu Feb 21 14:01:34 EET 2019. . 모든 것이 올바른 것처럼 보이지만 형식은 일반 인간이 아닌 프로그래머에게 날짜가 표시되는 방식에 더 가깝습니다. 사용자를 위해 날짜를 더 명확하게 표시하고자 합니다. . Tuesday, February 21_

그리고 연도 없이. 또는 필요한 경우 1년 단위로. 일반적으로 날짜를 다양한 방식으로 표시할 수 있기를 원합니다.

이를 위한 특별한 클래스가 있습니다: SimpleDateFormat.

예:

암호
Date current = new Date(105, 5, 4, 12, 15, 0);
SimpleDateFormat formatter = new SimpleDateFormat("MMM-dd-YYYY");
String message = formatter.format(current);
System.out.println(message);
콘솔 출력
Jun-04-2005

프로그램이 무엇을 표시하는지 보십시오: Jun-04-2005. 예전과는 전혀 다릅니다.

차이점은 개체 자체가 아니라 개체 에서 메서드를 Date호출하여 얻은 특수 문자열을 표시했다는 것입니다 . 그러나 그것은 여기의 요점조차 아닙니다.format()SimpleDateFormat

개체를 만들 때 SimpleDateFormat문자열을 "MMM-dd-YYYY"매개 변수로 전달했습니다. 콘솔 출력에서 ​​궁극적으로 본 날짜 형식을 전달하는 것은 이 문자열입니다.

  • MMM은 월 이름을 세 글자로 축약하여 표시함을 나타냅니다.
  • dd는 해당 월의 날짜를 표시함을 나타냅니다.
  • YYYY는 4자리 숫자를 사용하여 연도를 표시함을 나타냅니다.

월을 숫자로 출력하려면 대신 를 MMM작성해야 MM패턴이 생성됩니다 "MM-dd-YYYY". 화면 출력은06-04-2005

나중에 이 클래스에 대해 자세히 설명하겠습니다.


8. Date.parse방법

클래스 Date는 흥미롭고 유용한 다른 작업을 수행할 수 있습니다. 문자열에서 날짜를 가져올 수 있습니다. 또는 프로그래머가 말했듯이 문자열을 구문 분석할 수 있습니다.

parse()이를 위한 특별한 방법이 있습니다 . 구문 분석은 다음과 같습니다.

Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );

그런데 이 코드는 더 간결하게 작성할 수 있습니다.

Date date = new Date("Jul 06 12:15:00 2019");

문자열 구문 분석 에 대해서는 다른 단원에서 자세히 살펴보겠습니다 .