JavaのDateクラスとCalendarクラスの使用

7835 ワード

Java言語のCalendar(カレンダー)、Date(日付)、DateFormat(日付フォーマット)はJava標準の基本的で非常に重要な部分を構成しています.日付はビジネスロジック計算の重要な部分です.すべての開発者は将来の日付を計算し、日付の表示フォーマットをカスタマイズし、テキストデータを日付オブジェクトに解析することができます.私たちは2つの文章を書きました.これは第1編で、私たちは大体の学習日、日付フォーマット、日付の解析と日付の計算をします.
次のクラスについて説明します.
1、具体的なクラス(抽象クラスと相対)java.util.Date
2、抽象クラスjava.text.DateFormatとその具体的なサブクラス、java.text.SimpleDateFormat
3、抽象クラスjava.util.Calendarとその具体的なサブクラス、java.util.GregorianCalendar
具体的なクラスはインスタンス化することができますが、抽象的なクラスはできません.まず抽象的なクラスの具体的なサブクラスを実現しなければなりません.
DateクラスはJava開発パッケージ(JDK)1.0から進化し、当時は1つの日付データを取得したり設定したりするいくつかの方法しか含まれていなかった.例えば、月、日、年.これらの方法は現在批判され、Calendarクラスに移行している.ここでさらに議論する.この改良は日付データの国際化フォーマットをよりよく処理することを目的としている.JDK 1.1のように,Dateクラスは実際には小包クラスにすぎず,GMT(グリニッジ標準時間)1970年,1月1日00:00という時点の前または後に経験したミリ秒数を表す長いデータを含む.
一、日付オブジェクトの作成
システムの現在の日付と時間を使用して日付オブジェクトを作成し、長い整数を返す簡単な例を見てみましょう.この時間は通常Java仮想マシン(JVM)ホスト環境のシステム時間と呼ばれます.

import java.util.Date;

public class DateExample1 {
public static void main(String[] args) {
// Get the system date/time
Date date = new Date();

System.out.println(date.getTime());
}
}

土曜日、2001年9月29日、午後は約6:50の様子で、上記の例はシステム出力装置に1001803809710と表示されています.この例では、Dateコンストラクション関数を使用して日付オブジェクトを作成しました.このコンストラクション関数はパラメータを受け入れていません.このコンストラクション関数は内部でSystem.currentTimeMillis()を使用しています.システムから日付を取得する方法.
では、1970年1月1日から経験したミリ秒数をどのように取得するかがわかりました.私たちはどのようにしてユーザーが知っているフォーマットでこの日付を表示することができますか?ここでクラスjava.text.SimpleDateFormatとその抽象ベースクラスjava.text.DateFormatが役に立ちます.
二、日付データのカスタムフォーマット
土曜日-9月-29日-2001年など、日付データのフォーマットをカスタマイズしたい場合は、次の例でこの作業をどのように完了するかを示します.

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateExample2 {

public static void main(String[] args) {

SimpleDateFormat bartDateFormat =
new SimpleDateFormat("EEEE-MMMM-dd-yyyy");

Date date = new Date();

System.out.println(bartDateFormat.format(date));
}
}

SimpleDateFormatのコンストラクション関数にフォーマット文字列「EEE-MMMM-dd-yyy」を渡すことで、自分が望むフォーマットを示すことができます.フォーマット文字列のASCII文字はフォーマット関数の下に日付データのどの部分が表示されているかを教えてくれます.EEEEEEは週で、MMMMは月で、ddは日です.yyyyは年です.文字の数によって日付がどのようにフォーマットされるかが決まります.「EE-MM-dd-yy」を渡すとSat-09-29-01が表示されます.Sun社のWebサイトで日付フォーマットオプションの完全な指示を参照してください.
三、テキストデータを日付オブジェクトに解析する
テキスト文字列にフォーマットされた日付オブジェクトが含まれているとします.この文字列を解析し、テキストの日付データから日付オブジェクトを作成したいとします.フォーマット文字列「MM-dd-yyyy」でSimpleDateFormatクラスを再び呼び出しますが、今回はテキストの日付データを生成するのではなくフォーマット解析を使用します.私たちの例では、以下に示すように、テキスト文字列「9-29-2001」を解析し、00173600000という値の日付オブジェクトを作成する.
例プログラム:


import java.text.SimpleDateFormat;
import java.util.Date;

public class DateExample3 {

public static void main(String[] args) {
// Create a date formatter that can parse dates of
// the form MM-dd-yyyy.
SimpleDateFormat bartDateFormat =
new SimpleDateFormat("MM-dd-yyyy");

// Create a string containing a text date to be parsed.
String dateStringToParse = "9-29-2001";

try {
// Parse the text version of the date.
// We have to perform the parse method in a
// try-catch construct in case dateStringToParse
// does not contain a date in the format we are expecting.
Date date = bartDateFormat.parse(dateStringToParse);

// Now send the parsed date as a long value
// to the system output.
System.out.println(date.getTime());
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}

五、標準の日付フォーマットプロセスを使用する
カスタマイズされた日付フォーマットを生成して解析できるようになった以上、組み込みのフォーマットプロセスをどのように使用するかを見てみましょう.方法DateFormat.getDateTimeInstance()は、いくつかの異なる方法で標準的な日付フォーマットプロセスを得ることができます.次の例では、組み込みの日付フォーマットプロセスを4つ取得しました.短いものが含まれています.中程度の、長い、完全な日付フォーマット.

import java.text.DateFormat;
import java.util.Date;

public class DateExample4 {

public static void main(String[] args) {
Date date = new Date();

DateFormat shortDateFormat =
DateFormat.getDateTimeInstance(
DateFormat.SHORT,
DateFormat.SHORT);

DateFormat mediumDateFormat =
DateFormat.getDateTimeInstance(
DateFormat.MEDIUM,
DateFormat.MEDIUM);

DateFormat longDateFormat =
DateFormat.getDateTimeInstance(
DateFormat.LONG,
DateFormat.LONG);

DateFormat fullDateFormat =
DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL);

System.out.println(shortDateFormat.format(date));
System.out.println(mediumDateFormat.format(date));
System.out.println(longDateFormat.format(date));
System.out.println(fullDateFormat.format(date));
}
}

注意getDateTimeInstanceの呼び出しのたびに2つの値が渡されます.1つ目のパラメータは日付スタイルで、2つ目のパラメータは時間スタイルです.これらは基本データ型int(整数型)です.読みやすさを考慮して、DateFormatクラスが提供する定数:SHOUT、MEDIUM、LONGを使用しました.とFULL.取得時間と日付フォーマットプロセスのより多くの方法とオプションを知るには、Sun社のWebサイトの説明を参照してください.
サンプル・プログラムを実行すると、次の内容が標準出力デバイスに出力されます.
9/29/01 8:44 PM
Sep 29, 2001 8:44:45 PM
September 29, 2001 8:44:45 PM EDT
Saturday, September 29, 2001 8:44:45 PM EDT
六、Calendar類
日付オブジェクトをフォーマットして作成できますが、時間、日、分などの日付データの特定の部分を設定して取得するにはどうすればいいですか?私たちはどのようにして日付のこれらの部分に値を加算したり減算したりしますか?答えはCalendarクラスを使うことです.私たちが前に述べたように、Calendarクラスの方法はDateクラスで罵られる方法に代わっています.
日付オブジェクトの各部分を設定、取得、操作したいと仮定します.例えば、1ヶ月の1日または1週間の1日です.このプロセスを実証するために、具体的なサブクラスjava.util.GregorianCalendarを使用して、次の例を考慮します.次の10番目の金曜日は13日です.

import java.util.GregorianCalendar;
import java.util.Date;
import java.text.DateFormat;

public class DateExample5 {

public static void main(String[] args) {
DateFormat dateFormat =
DateFormat.getDateInstance(DateFormat.FULL);

// Create our Gregorian Calendar.
GregorianCalendar cal = new GregorianCalendar();

// Set the date and time of our calendar
// to the system's date and time
cal.setTime(new Date());

System.out.println("System Date: " +
dateFormat.format(cal.getTime()));

// Set the day of week to FRIDAY
cal.set(GregorianCalendar.DAY_OF_WEEK,
GregorianCalendar.FRIDAY);
System.out.println("After Setting Day of Week to Friday: " +
dateFormat.format(cal.getTime()));

int friday13Counter = 0;
while (friday13Counter <= 10) {

// Go to the next Friday by adding 7 days.
cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

// If the day of month is 13 we have
// another Friday the 13th.
if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13) {
friday13Counter++;
System.out.println(dateFormat.format(cal.getTime()));
}
}
}
}


この例では、興味深い関数呼び出しを行います.
cal.set(GregorianCalendar.DAY_OF_WEEK,
GregorianCalendar.FRIDAY);
および:
cal.add(GregorianCalendar.DAY_OF_MONTH, 7);
setメソッドは、曜日のどの日を簡単に設定することで、金曜日に時間を調整することができます.ここでは定数DAYを使用していることに気づきました.OF_WEEKとFRIDAYはコードの可読性を高める.add方法は日付に数値を加えることができる.潤年のすべての複雑な計算はこの方法によって自動的に処理される.
この例の出力結果は次のとおりです.
System Date: Saturday, September 29, 2001
金曜日に設定すると
Friday, September 13, 2002
Friday, December 13, 2002
Friday, June 13, 2003
Friday, February 13, 2004
Friday, August 13, 2004
Friday, May 13, 2005
Friday, January 13, 2006
Friday, October 13, 2006
Friday, April 13, 2007
Friday, July 13, 2007
Friday, June 13, 2008
七、時間は君の手に握られている
これらのDateとCalendarクラスの例では、java.util.Date、java.text.SimpleDateFormat、java.util.GregorianCalendarを使用して多くの方法を作成することができます.
記事は次のとおりです.http://hi.baidu.com/xindongduanlv/blog/item/8373ffc4fefc39ac8326ac4d.html