Java Calendarクラスの詳細と使用例

5578 ワード

Java Calendarクラスの使用概要
実际のプロジェクトの中で、私达はいつも时间に対する処理に関连して、例えばウェブサイトに登录して、私达はウェブサイトのトップページがXXXを表示することを见て、あなたを歓迎します!今日はXXXX年です...銀行のサイトなど、ユーザーのログイン時間を記録するサイトもありますが、Javaでは日付操作に特化したCalendarというクラスが提供されています.では、このクラスには何か特別なところがありますか.まず、Calendarの声明を見てみましょう.

public abstract class Calendar extends Objectimplements Serializable, Cloneable, Comparable

このクラスはabstractによって修飾され、newによってインスタンスを取得できないことを示します.これに対して、Calendarは、カレンダフィールドが現在の日付と時間で初期化されたCalendarオブジェクト(Calendarのサブクラスオブジェクト)を返すクラスメソッドgetInstanceを提供します.

Calendar rightNow = Calendar.getInstance();

なぜCalendarのサブクラスオブジェクトが返されるのかというと、西側諸国の最初の週の大部分が日曜日であるのに対し、中国は月曜日であるため、getInstanceメソッドがインスタンスのソースコードを取得する方法を見てみましょう.

/**
 * Gets a calendar using the default time zone and locale. The
 * Calendar returned is based on the current time
 * in the default time zone with the default locale.
 *
 * @return a Calendar.
 */
public static Calendar getInstance()
{
 Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT));
 cal.sharedZone = true;
 return cal;
}

ここでcreateCalendarメソッドは、異なる国の地域に基づいて対応する日付サブクラスを返すことです.

private static Calendar createCalendar(TimeZone zone,
      Locale aLocale)
 {
 Calendar cal = null;

 String caltype = aLocale.getUnicodeLocaleType("ca");
 if (caltype == null) {
  // Calendar type is not specified.
  // If the specified locale is a Thai locale,
  // returns a BuddhistCalendar instance.
  if ("th".equals(aLocale.getLanguage())
   && ("TH".equals(aLocale.getCountry()))) {
  cal = new BuddhistCalendar(zone, aLocale);
  } else {
  cal = new GregorianCalendar(zone, aLocale);
  }
 } else if (caltype.equals("japanese")) {
  cal = new JapaneseImperialCalendar(zone, aLocale);
 } else if (caltype.equals("buddhist")) {
  cal = new BuddhistCalendar(zone, aLocale);
 } else {
  // Unsupported calendar type.
  // Use Gregorian calendar as a fallback.
  cal = new GregorianCalendar(zone, aLocale);
 }

 return cal;
 }

日付の操作をより容易にするため、CalendarクラスはYEAR、MONTH、DAY_OF_MONTH、HOURなどのカレンダーフィールド間の変換にはいくつかの方法があり、来週の日付の取得などのカレンダーフィールドの操作にいくつかの方法があります.瞬間はミリ秒値で表すことができます.これは、カレンダー(すなわち、グリニッジ標準時間1970年1月1日の00:00:00:0.000、グリゴリオ暦)からのオフセット量です.
次にCalendarでよく使われる方法を見てみましょう

package com.test.calendar;

import java.util.Calendar;

import org.junit.Before;
import org.junit.Test;

public class CalendarDemo {
 Calendar calendar = null;

 @Before
 public void test() {
 calendar = Calendar.getInstance();
 }

 //     ,          
 @Test
 public void test1() {
 //    
 int year = calendar.get(Calendar.YEAR);

 //    ,            0~11,           +1       
 int month = calendar.get(Calendar.MONTH) + 1;

 //    
 int day = calendar.get(Calendar.DAY_OF_MONTH);

 //    
 int hour = calendar.get(Calendar.HOUR);
 // int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24    

 //    
 int minute = calendar.get(Calendar.MINUTE);

 //    
 int second = calendar.get(Calendar.SECOND);

 //   ,              
 int weekday = calendar.get(Calendar.DAY_OF_WEEK);

 System.out.println("   " + year + " " + month + " " + day + " " + hour
  + " " + minute + " " + second + " " + "  " + weekday);
 }

 //       
 @Test
 public void test2() {
 //           calendar.add(Calendar.MONTH, 1);
 calendar.add(Calendar.YEAR, 1);

 //    
 int year = calendar.get(Calendar.YEAR);

 //    
 int month = calendar.get(Calendar.MONTH) + 1;

 //    
 int day = calendar.get(Calendar.DAY_OF_MONTH);

 System.out.println("      :" + year + " " + month + " " + day + " ");
 }

 //             
 @Test
 public void test3() {
 //    6      
 int currentMonth = 6;
 //    7      ,     6        currentMonth  
 // 1
 calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1);

 calendar.add(Calendar.DATE, -1);

 //    
 int day = calendar.get(Calendar.DAY_OF_MONTH);

 System.out.println("6        " + day + " ");
 }

 //     
 @Test
 public void test4() {
 calendar.set(Calendar.YEAR, 2000);
 System.out.println("   " + calendar.get(Calendar.YEAR) + " ");

 calendar.set(2008, 8, 8);
 //    
 int year = calendar.get(Calendar.YEAR);

 //    
 int month = calendar.get(Calendar.MONTH);

 //    
 int day = calendar.get(Calendar.DAY_OF_MONTH);

 System.out.println("   " + year + " " + month + " " + day + " ");
 }
}

プログラム出力結果:

    2016 11 7 11 42 18   2
       :2017 11 7 
 6        30 
    2000 
    2008 8 8 

Calendarクラスにはbefore,after,compareToなどの方法もあり,Dateクラスと同様の使い方をしているが,現在はCalendarクラスで日付を操作することを推奨している.
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!