Java는 Java.util 패키지의 날짜 클래스를 제공하며 현재 날짜와 시간을 캡슐화합니다.
날짜 클래스는 두 생성자를 지원합니다. 첫 번째 생성자는 객체의 현재 날짜와 시간을 초기화합니다.
날짜( )
다음 생성자는 1970 년 1 월 1 일 자정 이후 밀리 초과 동일한 매개 변수를 수신합니다.
날짜 (Long Millisec)
사용 가능한 날짜 개체가 있으면 다음 지원되는 방법 중 하나를 호출하여 시간을 사용할 수 있습니다.
| Sn | 방법과 설명 |
|---|---|
| 1 | 부울 후 (날짜) 통화 날짜 객체에 지정된 날짜보다 또는 후기가 포함 된 경우 true를 반환하십시오. 그렇지 않으면 false를 반환하십시오. |
| 2 | 전 부울 전 (날짜) 전화 날짜 개체에 날짜에 지정된 날짜가 포함되거나 이른 경우 true를 반환합니다. 그렇지 않으면 false를 반환합니다. |
| 3 | 객체 클론 () 날짜 개체로 호출하십시오. |
| 4 | int compareto (날짜) 통화 객체의 값을 날짜와 비교하십시오. 이 두 값이 동일하면 반환 0. 호출 객체가 날짜보다 일찍있는 경우 음수 값을 반환합니다. 통화 객체가 날짜보다 늦은 경우 양수 값을 반환합니다. |
| 5 | int compareto (Object obj) OBJ가 클래스 날짜 인 경우 동일한 비교 (날짜) 작업을 사용하십시오. 그렇지 않으면 ClassCastException을 던집니다. |
| 6 | 부울 평등 (객체 날짜) 통화 날짜 객체에 동일한 시간 및 날짜 지정 날짜가 포함 된 경우 true를 반환하십시오. 그렇지 않으면 거짓을 반환하십시오. |
| 7 | Long GetTime () 1970 년 1 월 1 일 이후 통과 된 밀리 초 수를 반환합니다. |
| 8 | int hashcode () 호출 객체의 해시 코드를 반환합니다. |
| 9 | void settime (오랜 시간) 1970 년 1 월 1 일 자정부터 밀리 초로 경과 한 시간을 나타내는 지정된 시간을 설정합니다. |
| 10 | 문자열 toString () 날짜 개체를 호출하여 문자열로 변환하고 결과를 반환하십시오. |
import java.util.date; public class datedemo {public static void main (String args []) {// 날짜 개체 날짜를 인스턴스화합니다. // toString () system.out.println을 사용하여 시간과 날짜를 표시합니다 (date.toString ()); }}이것은 다음 결과를 생성합니다.
Mon 5 월 4 일 09:51:52 CDT 2009
날짜 비교
두 날짜를 비교하는 세 가지 방법이 있습니다.
simpledateformat을 사용하여 형식 날짜
SimpledateFormat은 날짜를 형식화하고 변환하는 데 로컬로 사용되는 콘크리트 클래스입니다. SimpleDateFormat을 사용하면 사용자 정의 스키마를 선택할 수 있습니다. 예를 들어:
import java.util.*; import java.text.*; public class datedemo {public static void main (String args []) {date dnow = new Date (); simpledateformat ft = new simpledateformat ( 'hh : mm : ss a zzz "에서"e yyyy.mm.dd'); System.out.println ( "현재 날짜 :" + ft.format (dnow)); }}이것은 다음 결과를 생성합니다.
현재 날짜 : Sun 2004.07.18 at 04:14:09 PM Pdt
간단한 날짜 형식 형식 코드
시간 형식을 지정하려면 시간 패턴 문자열을 사용하십시오. 이 패턴에서 모든 ASCII 문자는 패턴 문자로 유지되며 다음과 같이 정의됩니다.
| 성격 | 설명하다 | 예 |
|---|---|---|
| G | 시간 표시기 | 광고 |
| 와이 | 4 자리 | 2001 |
| 중 | 1 년 중반 | 7 월 또는 07 |
| 디 | 월의 날짜 | 10 |
| 시간 | 시간 AM/PM (1 ~ 12) | 12 |
| 시간 | 하루의 시간 (0 ~ 23) | 스물 두 번째 |
| 중 | 몇 시간 | 30 |
| 에스 | 몇 초 | 55 |
| 에스 | 밀리 초 | 234 |
| 이자형 | 요일 | 화요일 |
| 디 | 올해의 날 | 360 |
| 에프 | 매월 요일 | 2 (7 월 두 번째 수요일) |
| w | 중반 주 | 40 |
| w | 월의 주 | 1 |
| 에이 | AM/PM 마커 | 오후 |
| 케이 | 하루의 시간 (1 ~ 24) | 24 |
| 케이 | 시간 오전/pm (0 ~ 11) | 10 |
| 지 | 시간대 | 동부 표준시 |
| ' | 텍스트를 남겨주세요 | 구분기 |
| " | 단일 따옴표 | ` |
import java.util.date; public class datedemo {public static void main (String args []) {// 날짜 개체 날짜를 인스턴스화합니다. // toString () string str = string.format을 사용하여 시간과 날짜를 표시합니다 ( "현재 날짜/시간 : %tc", 날짜); System.out.printf (str); }}이것은 다음 결과를 생성합니다.
현재 날짜/시간 : 토요일 12 월 15 일 16:37:57 MST 2012
날짜의 여러 형식을 제공하는 것은 나쁜 관행입니다. 형식 문자열은 매개 변수의 인덱스를 형식으로 표시 할 수 있습니다.
인덱스는 즉시 % 뒤에 있어야하며 $만큼 종료되어야합니다. 예를 들어:
import java.util.date; public class datedemo {public static void main (String args []) {// 날짜 개체 날짜를 인스턴스화합니다. // toString () system.out.printf를 사용하여 시간과 날짜를 표시합니다. }}이것은 다음 결과를 생성합니다.
마감일 : 2004 년 2 월 9 일
또는 <플래그를 사용할 수 있습니다. 동일한 매개 변수를 의미하며 위 형식 사양에 따라 다시 사용해야합니다. 예를 들어:
import java.util.date; public class datedemo {public static void main (String args []) {// 날짜 개체 날짜를 인스턴스화합니다. // 표시 형식 날짜 System.out.printf ( " %s %tb %<te, %<ty", "마감일 :", 날짜); }}이것은 다음 결과를 생성합니다.
마감일 : 2004 년 2 월 9 일
날짜 및 시간 변환 문자
| 성격 | 설명하다 | 예 |
|---|---|---|
| 기음 | 완전한 날짜와 시간 | Mon 5 월 4 일 09:51:52 CDT 2009 |
| 에프 | ISO 8601 날짜 | 2004-02-09 |
| 디 | 미국 형식 시간 (월/일/년) | 2004 년 2 월 9 일 |
| 티 | 24- 시간 시스템 | 18:05:19 |
| 아르 자형 | 12 번 시스템 | 06:05:19 PM |
| 아르 자형 | 24 번 시스템, 초는 없습니다 | 18:05 |
| 와이 | 4 자리 (First Row Zero 열 사용) | 2004 |
| 와이 | 올해의 마지막 두 자리 (첫 번째 행 제로 열 사용) | 04 |
| 기음 | 올해의 첫 두 자리 (첫 번째 행 제로 열 사용) | 20 |
| 비 | 한 달 이름 | 2월 |
| 비 | 약어 월 이름 | 2 월 |
| 중 | 두 자리 달 (첫 번째 행 제로 열 사용) | 02 |
| 디 | 두 자리 날짜 (첫 번째 행 제로 열 사용) | 03 |
| 이자형 | 두 자릿수 날짜 (전방 제로 열 없음) | 9 |
| 에이 | 전체 주 이름 | 월요일 |
| 에이 | 주 이름의 약어 | 몬 |
| J. | 한 해 중반의 3 자리 (첫 번째 Row Zero 열 사용) | 069 |
| 시간 | 2 자리 시간 (첫 번째 행 제로 열 사용), 00과 23 사이 | 18 |
| 케이 | 0과 23 사이의 2 자리 (전방 제로 열 없음) | 18 |
| 나 | 2 자리 시간 (첫 번째 행 제로 열 사용), 01과 12 사이 | 06 |
| 엘 | 2 자리 (전방 제로 열 없음), 1에서 12 사이 | 6 |
| 중 | 2 자리 분 (첫 번째 행 제로 열 사용) | 05 |
| 에스 | 2 자간 (첫 번째 행 제로 열 사용) | 19 |
| 엘 | 3 자리 밀리 초 (첫 번째 행 제로 열 사용) | 047 |
| N | 9 자리 나노 초 (첫 번째 행 제로 열 사용) | 047000000 |
| 피 | 대문자 오후 마크 | 오후 |
| 피 | 소문자 오후 마크 | 오후 |
| 지 | RFC 822 GMT 번호에서 오프셋 | -0800 |
| 지 | 시간대 | PST |
| 에스 | 1970-01-01 00:00:00 GMT에서 초 | 1078884319 |
| 큐 | 1970-01-01 00:00:00의 GMT | 1078884319047 |
문자열 변환 날짜
SimpledateFormat 클래스에는 Parse ()와 같은 몇 가지 추가 메소드가 있으며 주어진 SimpledateFormat에 저장된 개체의 형식에 따라 문자열을 변환하려고합니다. 예를 들어:
import java.util.*; import java.text.*; public class datedemo {public static void main (String args []) {simpledateformat ft = new simpledateformat ( "yyyy-mm-dd"); 문자열 입력 = args.length == 0? "1818-11-11": args [0]; System.out.print (입력 + "파르즈 AS"); 날짜 t; try {t = ft.parse (입력); System.out.println (t); } catch (parseException e) {System.out.println ( "" + ft를 사용하는 대중을 사용할 수 없음); }}}위 프로그램의 실행 예제는 다음과 같은 결과를 얻습니다.
$ java 날짜 Datedemo1818-11-11 수요일 11 월 11 일 00:00:00 GMT 1818 $ Java Datedemo 2007-12-012007-12-01 SAT DEC 01 00:00:00 GMT 2007
잠시 잠을 자십시오
최대 절전 모드에서 밀리 초에서 컴퓨터의 전체 수명주기까지 언제든지 수행 할 수 있습니다. 예를 들어, 다음 프로그램은 10 초 동안 잠을 자게됩니다.
import java.util.*; public class sleepdemo {public static void main (String args []) {try {system.out.println (new date () + "/n"); Thread.sleep (5*60*10); System.out.println (새 날짜 () + "/n"); } catch (예외 e) {System.out.println ( "예외!"); }}}이것은 다음 결과를 생성합니다.
Sun May 03 18:04:41 GMT 2009SUN 5 월 03 18:04:51 GMT 2009
실행 시간을 측정하십시오
때로는 측정 될 수있는 시점이 밀리 초로있을 수 있습니다. 위의 예를 다시 작성해 봅시다.
import java.util.*; public class diffdemo {public static void main (String args []) {try {long start = System.CurrentTimeMillis (); System.out.println (새 날짜 () + "/n"); Thread.sleep (5*60*10); System.out.println (새 날짜 () + "/n"); Long End = System.CurrentTimeMillis (); LONG DIFF = END- 시작; System.out.println ( "차이 :" + diff); } catch (예외 e) {System.out.println ( "예외!"); }}}이것은 다음 결과를 생성합니다.
Sun May 03 18:16:51 GMT 2009SUN 5 월 03 18:16:57 GMT 2009 Difference IS : 5993
GregorianCalendar 클래스
GregorianCalendar는 달력 클래스의 구체적인 구현입니다. 이 튜토리얼에서는 캘린더 클래스가 논의되지 않으므로 표준 Java 문서를 확인할 수 있습니다.
Calendar의 GetInstance () 메소드는 현재 날짜 및 시간 및 시간 기본 로케일 및 시간대로 초기화 된 GregorianCalendar를 반환합니다. GregorianCalendar : AD 및 BC에서 두 개의 필드가 정의되어 있습니다. 이들은 그레고리 달력에 정의 된 두 시대를 나타냅니다.
GregorianCalendar 객체의 여러 생성자도 있습니다.
| Sn | 생성자 설명 |
|---|---|
| 1 | GregorianCalendar () 기본 시간대의 현재 시간을 기본 로케일과 함께 사용하여 기본 GregorianCalendar를 구성하십시오. |
| 2 | gregoriancalendar (int 연도, int month, int date) 기본 시간대에 기본 로케일을 설정하여 주어진 날짜로 GregorianCalendar를 구성합니다. |
| 3 | gregoriancalendar (int 연도, int 달, int 날짜, int 시간, int minute) 주어진 날짜와 시간이 기본 로케일과 함께 기본 시간대로 설정된 GregorianCalendar를 구성합니다. |
| 4 | gregoriancalendar (int 연도, int 달, int 날짜, int 시간, int minute, int second) 주어진 날짜와 시간이 기본 로케일로 기본 시간대로 설정된 GregorianCalendar를 구성하십시오. |
| 5 | GregorianCalendar (Locale Alocale) 주어진 로케일의 현재 시간과 기본 시간대에 따라 GregorianCalendar를 구축하십시오. |
| 6 | GregorianCalendar (Timezone Zone) 현재 시간을 기준으로 GregorianCalendar는 기본 로케일을 사용하여 주어진 시간대에 내장됩니다. |
| 7 | GregorianCalendar (Timezone Zone, Locale Alocale) GregorianCalendar는 주어진 로케일의 현재 시간과 주어진 시간대를 기준으로 구축됩니다. |
| Sn | 방법과 설명 |
|---|---|
| 1 | void Add (int 필드, int 금액) 캘린더 기반 규칙은 주어진 시간 필드에 지정된 (서명 된) 시간을 추가합니다. |
| 2 | 보호 된 void computefields () UTC를 밀리 초 시간 필드 값으로 변환하십시오. |
| 3 | 보호 된 void computetime () 캘린더가 변환되는 밀리 초를 덮어 쓰기 시간 도메인 값은 UTC입니다. |
| 4 | 부울 평등 (Object OBJ) 이 GregorianCalendar는 객체 참조와 비교됩니다. |
| 5 | int get (int field) 주어진 시간 도메인의 값을 가져옵니다. |
| 6 | int getActualMaximum (int field) 현재 날짜에 주어진 필드의 가능한 최대 값을 반환합니다. |
| 7 | int getActualminimum (int 필드) 현재 날짜가 주어지면 필드가 가질 수있는 최소값을 반환합니다. |
| 8 | int getgreatestminimum (int field) 주어진 필드에 대한 최고 및 최저 값 (변경 사항이있는 경우)을 반환합니다. |
| 9 | 날짜 getGregorianChange () Gregorian 달력에서 변경 날짜를 얻으십시오. |
| 10 | int getleastmaximum (int 필드) 변경 사항이있는 경우 주어진 필드의 최대 최대 값을 반환합니다. |
| 11 | int getmaximum (int field) 주어진 필드의 최대 값을 반환합니다. |
| 12 | 날짜 gettime () 캘린더의 현재 시간을 얻으십시오. |
| 13 | Long GetTimeInmillis () 달력을 얻는 현재 시간. |
| 14 | Timezone gettimezone () 시간대를 얻으십시오. |
| 15 | int getminimum (int 필드) 주어진 필드에서 최소값을 반환합니다. |
| 16 | int hashcode () 해시 코드를 다시 작성하십시오. |
| 17 | 부울 isleapyear (int year) 주어진 연도가 윤년이라고 결정합니다. |
| 18 | void Roll (Int Field, Boolean Up) 더 큰 필드를 변경하지 않고 주어진 시간 필드의 단위를 추가 또는 감격 (위/다운) 시간 (위/다운). |
| 19 | void set (int field, int value) 주어진 값으로 시간 필드를 설정합니다. |
| 20 | void set (int 연도, int month, int date) 연도, 월 및 일의 가치로 설정하십시오. |
| 스물 하나 | void set (int 연도, int 달, int 날짜, int 시간, int minute) 연도, 월, 일, 시간 및 분 값으로 설정하십시오. |
| 스물 두 번째 | void set (int 연도, int 달, int 날짜, int 시간, int minute, int second) 필드의 연도, 월, 일, 시간, 분 및 두 번째 가치로 설정하십시오. |
| 스물 셋 | void setGregorianChange (날짜 날짜) GregorianCalendar 변경 날짜를 설정하십시오. |
| 24 | void settime (날짜) 현재 시간과 주어진 날짜를 설정합니다. |
| 25 | void settimeinmillis (Long Millis) 주어진 긴 값에서 캘린더의 현재 시간을 설정하십시오. |
| 26 | void settimezone (TimeZone 값) 주어진 시간대 값으로 시간대를 설정합니다. |
| 27 | 문자열 toString () 이 캘린더의 문자열 표현을 반환합니다. |
import java.util.*; public class gregoriancalendardemo {public static void main (String args []) {String month [] = { "jan", "feb", "mar", "apr", "may", "jun", "Jun", "Aug", "Sep", "Oct", "Nov"}; int 년; // // 기본 로케일 및 시간대에서 현재 날짜와 시간을 사용하여 초기화 된 GregorianCalendar를 만듭니다. GregorianCalendar gcalendar = New GregorianCalendar (); // 현재 시간 및 날짜 정보를 표시합니다. System.out.print ( "날짜 :"); System.out.print (개월 [gcalendar.get (calendar.month)]); system.out.print ( "" + gcalendar.get (calendar.date) + ""); System.out.println (Year = gcalendar.get (calendar.year)); System.out.print ( "시간 :"); System.out.print (gcalendar.get (calendar.hour) + ":"); System.out.println (gcalendar.get (calendar.minute) + ":"); System.out.println (gcalendar.get (calendar.second)); // 현재 연도가 윤년인지 테스트합니다. } else {System.out.println ( "현재 연도는 도약이 아닙니다"); }}}이것은 다음 결과를 생성합니다.
날짜 : 2009 년 4 월 22 일 : 11 : 25 : 27 현재 연도는 도약이 아닙니다.
캘린더 애플릿
캘린더 애플릿을 살펴 보겠습니다. 여기서 우리는 기존 MVC 구조를 사용하여 Calendarviewer, CalendarController 및 Calendarmodel의 세 가지 범주를 설계합니다.
CalendarViewer.java 주로 UI를 처리하고, 기존 코드를 사용하고, 구성하고 비즈니스 로직을 추출하여 디스플레이 레이어 처리에 중점을 둡니다.
Calendarviewer.java
공개 클래스 캘린더 뷰어 확장 jwindow 구현 ActionListener {jpanel calendarympanel = null; JBUTTON LEFTBUTTON = NEW JBUTTON ( "<<"); JBUTTON RIGHTBUTTON = NEW JBUTTON ( ">>"); LABEL AGLABEL = 새 레이블 (); 레이블 MonthLabel = 새 레이블 (); 레이블 PassedDaysLabel = 새 레이블 (); JPANEL CALENDARWDPANEL = NULL; // CALENDAR_WEEK 및 CALENDAR_DAYS JPANEL CALENDARWEEKPANEL = NULL; // 매주 열에 대한 레이아웃 JPANEL CALENDARDAYSPANEL = NULL; // 날짜 열에 대한 레이아웃 JPANEL CALENDAREXITPANEL = NULL; JBUTTON QUITBUTTON = NEW JBUTTON ( "Close"); Border Emptyborder = BorderFactory.CreateEmptyBorder (); CalendarController CController = New CalendarController (); public calendarviewer () {super (); buildui (); } public void buildUi () {buildTopPanel (); BuildCenterpanel (); BuildBottompanel (); setLayout (New BorderLayout ()); . . . . . . } private void buildTopPanel () {. . . . . . } private void buildCenterPanel () {. . . . . . } private void buildBottomPanel () {. . . . . . } public jpanel updateSpanel () {. . . . . . } public void updatePassedDaysLabel () {. . . . . . } public void ActionPerformed (ActionEvent e) {. . . . . . } public static void main (String [] args) {swingUtilities.inVokelater (new Runnable () {public void run () {new CalendarViewer ();}}); }}UI 구조는 주로 상단, 중간 및 하단의 3 개의 패널에 해당하는 3 개의 블록으로 나뉩니다.
이벤트 청취 처리는 다음 방법으로 완료됩니다.
이벤트 기반 UI 업데이트는 다음 두 가지 방법으로 수행됩니다.
UpdateSpanel (); updatePassedDaysLabel (); CalendarController.java는 주로 특정 비즈니스 로직을 처리하는 반면, 특정 응용 프로그램과 관련이없는 일부 캘린더 알고리즘 논리는 CalendarModel.java에 전달됩니다. CalendarModel.javapublic Class CalendarModel {private int daytab [] [] = {{{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 30, 31}, {0, 31, 31, 30, 31, 30, 31, 30, 31}; 공개 부울 isleapyear (int year) {return ((년 % 4 == 0 && 년 % 100! = 0) || 년 % 400 == 0); } public int dayofyear (int day, int month, int 년) {int leap = isleapyear (년)? 1 : 0; for (int i = 1; i <month; i ++) day+= daytab [leap] [i]; 귀국의 날; } public int daysofmonth (int month, int 년) {int leap = isleapyear (년)? 1 : 0; Return Daytab [Leap] [Month]; } public int dayofweek (int day, int month, int 년) {if (month == 1) {month = 13; 년도--; } if (Month == 2) {Month = 14; 년도--; } return (day + 2 * 달 + 3 * (월 + 1) / 5 + 년 + 년 / 4-4 년 / 100 + 년 / 400) % 7 + 1; }}각각 도약 연도 및 비 이식 연도의 월 일수를 나타내는 2 차원 배열을 만듭니다. 주요 방법은 다음과 같습니다.
Kim Larson 계산 공식