JAvaのカレンダクラス(Calendar)の詳細

14690 ワード

正直に言うと、時間の処理については、私はほとんどCalendarカレンダー類で解決しています.今整理して、後で開発して調べるのに便利です.
java.util
クラスCalendar
java.lang.Object継承者java.util.Calendar
実装されたすべてのインタフェース:Serializable,Cloneable,Comparable
直接既知サブクラス:GregorianCalendar
public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable
1.Calendarクラス
まず、まず、Calendarのインスタンス:Calendar instance Calendar.getInstance();を作成する.ここで返される特定のクラスタイプは、CalendarのサブクラスGregorianCalendarのオブジェクトであるため、使用時に直接new GregorianCalendar()を以下のプレゼンテーションでは、いずれもinstanceをCalendarのインスタンスとして使用することもできる.
Calendarクラスのメンバー変数:
ここで以下でいうget,setメソッドとはinstanceのget,setメソッドを指す.
static int  ALL_STYLES
                    getDisplayNames       ,   "January"   "Jan"。
static int  AM 
                          AM_PM    。
static int  AM_PM 
          get   set      ,   HOUR              。
static int  APRIL 
                                  MONTH    。
protected  boolean  areFieldsSet 
             fields[]           ,    true。
static int  AUGUST 
                                  MONTH    。
static int  DATE 
          get   set      ,         。
static int  DAY_OF_MONTH 
          get   set      ,         。
static int  DAY_OF_WEEK 
          get   set      ,          。
static int  DAY_OF_WEEK_IN_MONTH 
          get   set      ,            。
static int  DAY_OF_YEAR 
          get   set      ,         。
static int  DECEMBER 
                                   MONTH    。
static int  DST_OFFSET 
          get   set      ,               。
static int  ERA 
                get   set      ,          AD   BC。
static int  FEBRUARY 
                                  MONTH    。
static int  FIELD_COUNT 
          get   set            。
protected  int[]    fields 
                         。
static int  FRIDAY 
             Friday   DAY_OF_WEEK    。
static int  HOUR 
          get   set      ,          。
static int  HOUR_OF_DAY 
          get   set      ,        。
protected  boolean[]    isSet 
                               。
protected  boolean  isTimeSet 
             time        ,    true。
static int  JANUARY 
                                  MONTH    。
static int  JULY 
                                  MONTH    。
static int  JUNE 
                                  MONTH    。
static int  LONG 
                 getDisplayName   getDisplayNames       ,   "January"。
static int  MARCH 
                                  MONTH    。
static int  MAY 
                                  MONTH    。
static int  MILLISECOND 
          get   set      ,        。
static int  MINUTE 
          get   set      ,         。
static int  MONDAY 
             Monday   DAY_OF_WEEK    。
static int  MONTH 
                get   set      。"            ,         0   "
static int  NOVEMBER 
                                   MONTH    。
static int  OCTOBER 
                                  MONTH    。
static int  PM 
                          AM_PM    。
static int  SATURDAY 
             Saturday   DAY_OF_WEEK    。
static int  SECOND 
          get   set      ,        。
static int  SEPTEMBER 
                                  MONTH    。
static int  SHORT 
                 getDisplayName   getDisplayNames       ,   "Jan"。
static int  SUNDAY 
             Sunday   DAY_OF_WEEK    。
static int  THURSDAY 
             Thursday   DAY_OF_WEEK    。
protected  long time 
                   ,      ,            1970   1  1   0:00:00       。
static int  TUESDAY 
             Tuesday   DAY_OF_WEEK    。
static int  UNDECIMBER 
                      MONTH    。
static int  WEDNESDAY 
             Wednesday   DAY_OF_WEEK    。
static int  WEEK_OF_MONTH 
          get   set      ,          。
static int  WEEK_OF_YEAR 
          get   set      ,          。
static int  YEAR 
               get   set      。
static int  ZONE_OFFSET 
          get   set      ,          GMT       。

**Calendarクラスのメソッド:**
 abstract void  add(int field, int amount) 
                 ,                   。
 boolean    after(Object when) 
              Calendar            Object        ,      。
 boolean    before(Object when) 
              Calendar            Object        ,      。
 void   clear() 
             Calendar            (            )      。
 void   clear(int field) 
             Calendar             (            )      。
 Object clone() 
                       。
 int    compareTo(Calendar anotherCalendar) 
               Calendar         (            )。"         ,   -1,0,1;-1     Calendar anotherCalendar    ,0       ,1    anotherCalendar   "
 boolean    equals(Object obj) 
             Calendar     Object   。
 int    get(int field) 
                    。
 int    getActualMaximum(int field) 
              Calendar     ,                。
 int    getActualMinimum(int field) 
              Calendar     ,                。
static Locale[] getAvailableLocales() 
                     ,    getInstance               。
 String getDisplayName(int field, int style, Locale locale) 
               style   locale      field          。
 Map    getDisplayNames(int field, int style, Locale locale) 
               style   locale       field       Map        。
 int    getFirstDayOfWeek() 
                   ;  ,   ,     SUNDAY,    ,     MONDAY。
abstract  int   getGreatestMinimum(int field) 
              Calendar                。
static Calendar getInstance() 
                           。
static Calendar getInstance(Locale aLocale) 
                             。
static Calendar getInstance(TimeZone zone) 
                             。
static Calendar getInstance(TimeZone zone, Locale aLocale) 
                           。
abstract  int   getLeastMaximum(int field) 
              Calendar                。
abstract  int   getMaximum(int field) 
              Calendar             。
 int    getMinimalDaysInFirstWeek() 
                           ,  ,                     ,        1。
abstract  int   getMinimum(int field) 
              Calendar             。
 Date   getTime() 
                  Calendar    (            )  Date   。
 long   getTimeInMillis() 
              Calendar     ,      。
 TimeZone   getTimeZone() 
              。
 int    hashCode() 
                    。
 boolean    isLenient() 
              /           。
 boolean    isSet(int field) 
                            ,         get                       。
abstract  void  roll(int field, boolean up) 
                        ( / )      ,        。
 void   roll(int field, int amount) 
                     (    )   ,        。
 void   set(int field, int value) 
                        。
 void   set(int year, int month, int date) 
                 YEAR、MONTH   DAY_OF_MONTH   。
 void   set(int year, int month, int date, int hourOfDay, int minute) 
                 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY   MINUTE   。
 void   set(int year, int month, int date, int hourOfDay, int minute, int second) 
               YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE   SECOND   。
 void   setFirstDayOfWeek(int value) 
                       ;  ,   ,     SUNDAY,    ,     MONDAY。
 void   setLenient(boolean lenient) 
              /          。
 void   setMinimalDaysInFirstWeek(int value) 
                           ,  ,                     ,     1      。
 void   setTime(Date date) 
                Date     Calendar    。
 void   setTimeInMillis(long millis) 
               long      Calendar       。
 void   setTimeZone(TimeZone value) 
                       。
 String toString() 
                       。

1.1まず、Calendarメンバー変数の中で、get、setの変数との具体的な意味を説明します.これらの変数はよく使われるからです.
1.1.1 YEARこのフィールドの意味は年であり、現在が2017-1-1であるとすれば、実行:System.out.println(instance.get(Calendar.YEAR));印刷された値は2017である
1.1.2 MONTHこのフィールドの意味は月です.現在は2017-9-1だとしたら、実行:System.out.println(instance.get(Calendar.MONTH));印刷された値は8です.CalendarではMONTHの開始月が0であることに注意してください.
1.1.3 WEEK_OF_YEARとは、現在の年の総週数のうち、現在の日付が何週目であるかを指します
System.out.println("WEEK_OF_YEAR:"+instance.get(Calendar.WEEK_OF_YEAR));
System.out.println("   "+instance.getActualMaximum(Calendar.WEEK_OF_YEAR)+"  ");

印刷結果は次のとおりです.
WEEK_OF_YEAR:12
   52  

1.1.4 DATE現在時刻は何番ですか.例えば、今日は2017-3-20です.では、System.out.println(instance.get(Calendar.DATE));印刷の値は20です.
1.1.5 DAY_OF_MONTHの今月の総日数の中で現在何日が過ぎていますか(実はその値は上のDATEの値と同じです)
System.out.println("DAY_OF_MONTH:"+instance.get(Calendar.DAY_OF_MONTH));
System.out.println("    "+instance.getActualMaximum(Calendar.DAY_OF_MONTH)+" ");

印刷結果:
DAY_OF_MONTH:20

    31 

1.1.6 DAY_OF_YEARのその年のすべての日数の中で、当日何日過ぎました
System.out.println("DAY_OF_YEAR:"+instance.get(Calendar.DAY_OF_YEAR));
System.out.println("     "+instance.getActualMaximum(Calendar.DAY_OF_YEAR)+" ");

印刷結果:
DAY_OF_YEAR:79

     365 

1.1.7 DAY_OF_WEEKは週7日間のうち、現在時刻は曜日(1-7)で、注目すべきは週の始まりが日曜日、終わりが土曜日、今日が月曜日ならinstance.get(Calendar.DAY_OF_WEEK)の値は2
1.1.8 DAY_OF_WEEK_IN_MONTHとは、現在の期間が現在の月の数週目であり、1ヶ月の1日が第1週目、8日が第2週目である
1.1.9 WEEK_OF_MONTHは同じ現在の月の曜日ですが、その値は1.1.8のDAY_とは異なります.OF_WEEK_IN_MONTHは、現在の週の基準が異なります.例えば、今月の1日が水曜日で、最初の週であれば、5日の日曜日になると2週目になります.8のDAY_を押すとOF_WEEK_IN_MONTHの計算は5日が最初の週です

System.out.println("WEEK_OF_MONTH:"+instance.get(Calendar.WEEK_OF_MONTH));

System.out.println("    "+instance.getActualMaximum(Calendar.WEEK_OF_MONTH)+"  ");


印刷結果は次のとおりです.
WEEK_OF_MONTH:4

    5  

計算されたのは4.4週間で、5週間と表示されています.
1.2.0 AM_PMは、現在時刻がAMであるかPMであるかを判断するために用いる、AM値が0であればPMが1である.
1.2.1 HOUR現在時刻を表示する12時間制
1.2.2 HOUR_OF_DAY現在時刻を表示する24時間制
1.2.3 MINUTE現在時刻を表示する分数1.2.4 SECOND現在時刻を表示する秒数1.2.5 MILLISECOND現在時刻を表示するミリ秒数
1.2 get,setメソッドと値を取得しないメンバー変数(直接使用)もいくつかあります.
1.2.0週次メンバー変数SUNDAY-SATRADYの値は1-7 1.2.1月メンバー変数JANUARY-DECEEMBER(0-12)
2.GregorianCalendarクラス
GregorianCalendarクラスには、親クラスの様々な豊富な属性と方法のほかに、使いやすい方法があります.
構築方法:
GregorianCalendar() 
          Constructs a new GregorianCalendar initialized to the current date and time with the default Locale and TimeZone.
GregorianCalendar(int year, int month, int day) 
          Constructs a new GregorianCalendar initialized to midnight in the default TimeZone and Locale on the specified date.
GregorianCalendar(int year, int month, int day, int hour, int minute) 
          Constructs a new GregorianCalendar initialized to the specified date and time in the default TimeZone and Locale.
GregorianCalendar(int year, int month, int day, int hour, int minute, int second) 
          Constructs a new GregorianCalendar initialized to the specified date and time in the default TimeZone and Locale.
GregorianCalendar(Locale locale) 
          Constructs a new GregorianCalendar initialized to the current date and time and using the specified Locale and the default TimeZone.
GregorianCalendar(TimeZone timezone) 
          Constructs a new GregorianCalendar initialized to the current date and time and using the specified TimeZone and the default Locale.
GregorianCalendar(TimeZone timezone, Locale locale) 
          Constructs a new GregorianCalendar initialized to the current date and time and using the specified TimeZone and Locale.

実はその親Calendarにはこのような機能があります
その方法は役に立ちます.boolean isLeapYear(int year)年が閏年かどうかを判断します.
3.時間処理の簡単な使用
日付の各属性を個別に取得
        Calendar instance = Calendar.getInstance();
        System.out.println(instance.get(Calendar.YEAR)+" ");
        System.out.println((instance.get(Calendar.MONTH)+1)+" ");
        System.out.println(instance.get(Calendar.DATE)+" ");
        System.out.println(instance.get(Calendar.HOUR_OF_DAY)+" "); //24   
        
        switch (instance.get(Calendar.AM_PM)) {
        case Calendar.AM:
            System.out.println("  ");
            break;
        case Calendar.PM:
            System.out.println("  ");
            break;
        }
        
        System.out.println(instance.get(Calendar.MINUTE)+" ");
        System.out.println(instance.get(Calendar.SECOND)+" ");
        System.out.println(instance.get(Calendar.MILLISECOND)+"  ");

印刷:
2017 

3 

21 

10 

  

7 

35 

951  

再プレゼンテーション:
        Calendar instance = Calendar.getInstance();
        long currentTime = instance.getTimeInMillis();//       
        
        instance.add(Calendar.DAY_OF_YEAR, 1); //              
        long tomorrowTime = instance.getTimeInMillis();
        
        System.out.println("       "+(tomorrowTime-currentTime)/(1000*60*60*24)+" ");
       1 

たとえばmysqlデータベースからdateタイプの日付(yyyyy-MM-dd)を取り出した場合、時刻のミリ秒を0に設定することに注意してください.
現在のシステム時間とデータベース内のdateで日付を比較する場合、ある日付が現在の日付より前または後である場合はafterまたはbeforeメソッドでbooleanタイプを返すことができますが、この2つの日付が等しいかどうかを比較するには、現在のシステム時間、分、秒、ミリ秒、いずれも0に設定することに注意する必要があります.比較に成功するか、intタイプを返すcompareToメソッドを使用するか、戻り値はそれぞれ-1,1,0で、ある日付より前、後、等しい.
instance.set(Calendar.HOUR_OF_DAY, 0);
instance.set(Calendar.MINUTE, 0);
instance.set(Calendar.SECOND, 0);
instance.set(Calendar.MILLISECOND, 0);