モジュール java.base
パッケージ java.text

クラスDateFormat

  • すべての実装されたインタフェース:
    Serializable, Cloneable
    直系の既知のサブクラス:
    SimpleDateFormat

    public abstract class DateFormat
    extends Format
    DateFormatは、言語に依存しない方法で日付または時刻をフォーマットおよび解析する、日付/時刻フォーマット・サブクラスの抽象クラスです。 SimpleDateFormatなどの日時フォーマット・サブクラスによって、フォーマット(日付→テキスト)、解析(テキスト→日付)および正規化を行うことができます。 日付は、Dateオブジェクトまたは1970年1月1日グリニッジ標準時00:00:00からのミリ秒で表現されます。

    DateFormatは、デフォルト値、指定されたロケール、いくつかのフォーマット・スタイルに基づいて、デフォルトの日時フォーマッタを取得する多くのクラス・メソッドを提供します。 フォーマット・スタイルにはFULLLONGMEDIUM、およびSHORTがあります。 これらのスタイルの詳細と使用例については、メソッドの説明を参照してください。

    DateFormatは、すべてのロケールの日付についてフォーマットおよび解析を支援します。 コードは、月、曜日、カレンダ・フォーマット、陰暦太陽暦などロケールの慣習とは完全に独立しています。

    現在のロケール用に日付をフォーマットするためには、次のstaticファクトリ・メソッドの1つを使用します。

    
     myString = DateFormat.getDateInstance().format(myDate);
     

    複数の日付をフォーマットする場合には、そのフォーマットを取得して、それを複数回使う方が効率的です。これにより、システムがローカルの言語と国のルールを何度も取得する必要がなくなります。

    
     DateFormat df = DateFormat.getDateInstance();
     for (int i = 0; i < myDate.length; ++i) {
         output.println(df.format(myDate[i]) + "; ");
     }
     

    ある日付を異なるロケールに対してフォーマットする場合には、getDateInstance()の呼出しにその日付を指定します。

    
     DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
     

    指定されたロケールに、"ca" (calendar)、"rg" (リージョン・オーバーライド)、および/または"tz" (timezone) 「Unicode拡張」が含まれている場合、カレンダ、国および/または書式設定のタイムゾーンがオーバーライドされます。 "ca"と"rg"の両方が指定されている場合、"ca"拡張子のカレンダは、"rg"拡張子の暗黙のものよりも優先されます。

    さらに、解析のためにDateFormatを使用できます。

    
     myDate = df.parse(myString);
     

    その国の通常の日付フォーマットを取得するには、getDateInstanceを使用します。 ほかにも使用可能なstaticファクトリ・メソッドがあります。 その国の時刻フォーマットを取得するには、getTimeInstanceを使用します。 日付と時刻フォーマットを取得するには、getDateTimeInstanceを使用します。 結果の長さを制御するために、これらのファクトリ・メソッドを異なるオプションで渡すことができます(SHORTからMEDIUMLONGFULLへ)。 正確な結果はロケールに依存しますが、一般的には次のようになります。

    • SHORTはすべて数値で、12.13.523:30pmなど
    • MEDIUMはそれより長い形式で、Jan 12, 1952など
    • LONGはさらに長い形式で、January 12, 19523:30:32pmなど
    • FULLはほぼ完全に指定する形式で、Tuesday, April 12, 1952 AD or 3:30:42pm PSTなど。

    必要に応じて、フォーマットにタイムゾーンを設定することもできます。 フォーマットや解析をさらに制御する場合(または、ユーザーにそのような制御を与える場合)には、ファクトリ・メソッドから得たDateFormatSimpleDateFormatにキャストする方法を試行することもできます。 この方法はほとんどの国に有効ですが、そうでない場合に備えて、tryブロックに入れるようにしてください。

    さらに、parseとformatメソッドの形式をParsePositionFieldPositionとともに使用すれば、次のことが可能です。

    • 文字列のそれぞれの部分を段階的に解析する。
    • 特定のフィールドを位置合わせしたり、画面上のどこが選択状態なのかを調査する。

    Synchronization

    日付フォーマットは同期化されません。 スレッドごとに別のフォーマット・インスタンスを作成することをお薦めします。 複数のスレッドがフォーマットに並行してアクセスする場合は、外部的に同期化する必要があります。

    実装要件:
    導入されたバージョン:
    1.1
    関連項目:
    Format, NumberFormat, SimpleDateFormat, Calendar, GregorianCalendar, TimeZone, 直列化された形式
    • ネストされたクラスのサマリー

      ネストされたクラス 
      修飾子と型 クラス 説明
      static class  DateFormat.Field
      DateFormat.formatToCharacterIteratorから返されたAttributedCharacterIterator内の属性キー、およびFieldPosition内のフィールド識別子として使用する定数を定義します。
    • フィールドのサマリー

      フィールド 
      修飾子と型 フィールド 説明
      static int AM_PM_FIELD
      AM_PMフィールドの位置合わせのための定数です。
      protected Calendar calendar
      日付/時刻フィールドとそのインスタントを計算するために使用されるCalendarインスタンスです。
      static int DATE_FIELD
      DATEフィールドの位置合わせのための定数です。
      static int DAY_OF_WEEK_FIELD
      DAY_OF_WEEKフィールドの位置合わせのための定数です。
      static int DAY_OF_WEEK_IN_MONTH_FIELD
      DAY_OF_WEEK_IN_MONTHフィールドの位置合わせのための定数です。
      static int DAY_OF_YEAR_FIELD
      DAY_OF_YEARフィールドの位置合わせのための定数です。
      static int DEFAULT
      デフォルト・スタイル・パターンのための定数です。
      static int ERA_FIELD
      ERAフィールドの位置合わせのための定数です。
      static int FULL
      全スタイル・パターンのための定数です。
      static int HOUR_OF_DAY0_FIELD
      0から始まるHOUR_OF_DAYフィールドの位置合わせのための定数です。
      static int HOUR_OF_DAY1_FIELD
      1から始まるHOUR_OF_DAYフィールドの位置合わせのための定数です。
      static int HOUR0_FIELD
      0から始まるHOURフィールドの位置合わせのための定数です。
      static int HOUR1_FIELD
      1から始まるHOURフィールドの位置合わせのための定数です。
      static int LONG
      長いスタイル・パターンのための定数です。
      static int MEDIUM
      長さが中位のスタイル・パターンのための定数です。
      static int MILLISECOND_FIELD
      MILLISECONDフィールドの位置合わせのための定数です。
      static int MINUTE_FIELD
      MINUTEフィールドの位置合わせのための定数です。
      static int MONTH_FIELD
      MONTHフィールドの位置合わせのための定数です。
      protected NumberFormat numberFormat
      日付と時刻の数値をフォーマットするためにDateFormatが使用する数値フォーマッタです。
      static int SECOND_FIELD
      SECONDフィールドの位置合わせのための定数です。
      static int SHORT
      短いスタイル・パターンのための定数です。
      static int TIMEZONE_FIELD
      TIMEZONEフィールドの位置合わせのための定数です。
      static int WEEK_OF_MONTH_FIELD
      WEEK_OF_MONTHフィールドの位置合わせのための定数です。
      static int WEEK_OF_YEAR_FIELD
      WEEK_OF_YEARフィールドの位置合わせのための定数です。
      static int YEAR_FIELD
      YEARフィールドの位置合わせのための定数です。
    • コンストラクタのサマリー

      コンストラクタ 
      修飾子 コンストラクタ 説明
      protected DateFormat()
      新しい日付フォーマットを作成します。
    • フィールドの詳細

      • calendar

        protected Calendar calendar
        日付/時刻フィールドとそのインスタントを計算するために使用されるCalendarインスタンスです。 このフィールドは、フォーマットと解析の両方に使用されます。

        サブクラスは、このフィールドを、このDateFormatに関連付けられているLocaleに適したCalendarに初期化します。

      • numberFormat

        protected NumberFormat numberFormat
        日付と時刻の数値をフォーマットするためにDateFormatが使用する数値フォーマッタです。 サブクラスは、これを、このDateFormatに関連付けられているロケールに適した数値フォーマットに初期化します。
      • ERA_FIELD

        public static final int ERA_FIELD
        ERAフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • YEAR_FIELD

        public static final int YEAR_FIELD
        YEARフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • MONTH_FIELD

        public static final int MONTH_FIELD
        MONTHフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • DATE_FIELD

        public static final int DATE_FIELD
        DATEフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • HOUR_OF_DAY1_FIELD

        public static final int HOUR_OF_DAY1_FIELD
        1から始まるHOUR_OF_DAYフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。 HOUR_OF_DAY1_FIELDは、1から始まる24時間時計で使用します。 たとえば、23:59+01:00は24:59となります。
        関連項目:
        定数フィールド値
      • HOUR_OF_DAY0_FIELD

        public static final int HOUR_OF_DAY0_FIELD
        0から始まるHOUR_OF_DAYフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。 HOUR_OF_DAY0_FIELDは、0から始まる24時間時計で使用します。 たとえば、23:59+01:00は00:59となります。
        関連項目:
        定数フィールド値
      • MINUTE_FIELD

        public static final int MINUTE_FIELD
        MINUTEフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • SECOND_FIELD

        public static final int SECOND_FIELD
        SECONDフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • MILLISECOND_FIELD

        public static final int MILLISECOND_FIELD
        MILLISECONDフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • DAY_OF_WEEK_FIELD

        public static final int DAY_OF_WEEK_FIELD
        DAY_OF_WEEKフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • DAY_OF_YEAR_FIELD

        public static final int DAY_OF_YEAR_FIELD
        DAY_OF_YEARフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • DAY_OF_WEEK_IN_MONTH_FIELD

        public static final int DAY_OF_WEEK_IN_MONTH_FIELD
        DAY_OF_WEEK_IN_MONTHフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • WEEK_OF_YEAR_FIELD

        public static final int WEEK_OF_YEAR_FIELD
        WEEK_OF_YEARフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • WEEK_OF_MONTH_FIELD

        public static final int WEEK_OF_MONTH_FIELD
        WEEK_OF_MONTHフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • AM_PM_FIELD

        public static final int AM_PM_FIELD
        AM_PMフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • HOUR1_FIELD

        public static final int HOUR1_FIELD
        1から始まるHOURフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。 HOUR1_FIELDは、1から始まる12時間時計で使用します。 たとえば、11:30 PM+1時間は12:30 AMとなります。
        関連項目:
        定数フィールド値
      • HOUR0_FIELD

        public static final int HOUR0_FIELD
        0から始まるHOURフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。 HOUR0_FIELDは、0から始まる12時間時計で使用します。 たとえば、11:30 PM+1時間は00:30 AMとなります。
        関連項目:
        定数フィールド値
      • TIMEZONE_FIELD

        public static final int TIMEZONE_FIELD
        TIMEZONEフィールドの位置合わせのための定数です。 日時フォーマット機能のFieldPositionで使用します。
        関連項目:
        定数フィールド値
      • FULL

        public static final int FULL
        全スタイル・パターンのための定数です。
        関連項目:
        定数フィールド値
      • LONG

        public static final int LONG
        長いスタイル・パターンのための定数です。
        関連項目:
        定数フィールド値
      • MEDIUM

        public static final int MEDIUM
        長さが中位のスタイル・パターンのための定数です。
        関連項目:
        定数フィールド値
      • SHORT

        public static final int SHORT
        短いスタイル・パターンのための定数です。
        関連項目:
        定数フィールド値
      • DEFAULT

        public static final int DEFAULT
        デフォルト・スタイル・パターンのための定数です。 値はMEDIUMです。
        関連項目:
        定数フィールド値
    • コンストラクタの詳細

      • DateFormat

        protected DateFormat()
        新しい日付フォーマットを作成します。
    • メソッドの詳細

      • format

        public final StringBuffer format​(Object obj,
                                         StringBuffer toAppendTo,
                                         FieldPosition fieldPosition)
        指定されたObjectを日時文字列にフォーマットします。 フォーマットされた文字列は、指定されたStringBufferに追加されます。
        定義:
        format、クラス: Format
        パラメータ:
        obj - DateまたはNumberで、「エポック」からミリ秒オフセットを表す必要があります。
        toAppendTo - 返される日時文字列の文字列バッファ。
        fieldPosition - 返された文字列内のフィールドの位置を追跡します。 例えば、日時テキスト"1996.07.10 AD at 15:08:56 PDT"が与えられている場合、与えられたfieldPositionYEAR_FIELDであれば、fieldPositionのbegin indexとend indexはそれぞれ0と4に設定されます。 同じ日付/時間フィールドがパターン内に複数回現れた場合、その日時フィールドが最初に出現するようにfieldPositionが設定されます。 たとえば、パターン"h a z (zzzz)"とフィールドTIMEZONE_FIELDを使用してDateを日付時間文字列"1 PM PDT (Pacific Daylight Time)"にフォーマットすると、fieldPositionのbeginインデックスとendインデックスは、タイムゾーン・パターン文字の最初のオカレンスに対してそれぞれ5と8に設定されます'z'
        戻り値:
        toAppendToとして渡される文字列バッファ。フォーマットされたテキストが追加される
        例外:
        IllegalArgumentException - Formatが指定されたobjをフォーマットできない場合。
        関連項目:
        Format
      • format

        public abstract StringBuffer format​(Date date,
                                            StringBuffer toAppendTo,
                                            FieldPosition fieldPosition)
        Dateを日時文字列にフォーマットします。 フォーマットされた文字列は、指定されたStringBufferに追加されます。
        パラメータ:
        date - Date-日付文字列にフォーマットされる日付。
        toAppendTo - 返される日時文字列の文字列バッファ。
        fieldPosition - 返された文字列内のフィールドの位置を追跡します。 例えば、日時テキスト"1996.07.10 AD at 15:08:56 PDT"が与えられている場合、与えられたfieldPositionYEAR_FIELDであれば、fieldPositionのbegin indexとend indexはそれぞれ0と4に設定されます。 同じ日付/時間フィールドがパターン内に複数回現れた場合、その日時フィールドが最初に出現するようにfieldPositionが設定されます。 たとえば、パターン"h a z (zzzz)"とフィールドTIMEZONE_FIELDを使用してDateを日付時間文字列"1 PM PDT (Pacific Daylight Time)"にフォーマットすると、fieldPositionのbeginインデックスとendインデックスは、タイムゾーン・パターン文字の最初のオカレンスに対してそれぞれ5と8に設定されます'z'
        戻り値:
        toAppendToとして渡される文字列バッファ。フォーマットされたテキストが追加される
      • format

        public final String format​(Date date)
        Dateを日時文字列にフォーマットします。
        パラメータ:
        date - 日付値の文字列にフォーマットされる時間の値。
        戻り値:
        フォーマットされた日付/時間文字列。
      • parse

        public Date parse​(String source)
                   throws ParseException
        指定された文字列の先頭からテキストを解析して日付を生成します。 メソッドは指定された文字列のテキスト全体に使用されない場合もあります。

        日付の解析の詳細については、parse(String, ParsePosition)メソッドを参照してください。

        パラメータ:
        source - 先頭が解析されるString
        戻り値:
        文字列から解析されるDate
        例外:
        ParseException - 指定された文字列の先頭が解析できない場合。
      • parse

        public abstract Date parse​(String source,
                                   ParsePosition pos)
        指定された解析位置に従って日時文字列を解析します。 たとえば、時刻テキスト"07/10/96 4:5 PM, PDT"が、Date(837039900000L)と同等なDateに解析されます。

        デフォルト値では、解析は厳密ではありません。入力が、このオブジェクトのフォーマット・メソッドで使用される形式ではないが、日付として解析可能であれば、解析は正常に行われます。 クライアントは、setLenient(false)を呼び出すことによって、このフォーマットを厳密に要求できます。

        この解析操作は、calendarを使用してDateを生成します。 その結果、サブクラスの実装によっては、calendarの日時フィールドおよびTimeZone値が上書きされた可能性があります。 さらに操作を行うには、setTimeZoneの呼出しによってすでに設定されている TimeZone値の復元が必要になることもあります。

        パラメータ:
        source - 解析する日付/時間文字列
        pos - 入力時は、解析を開始する位置。出力時は、解析が終了した位置、または解析が失敗した場合には開始位置。
        戻り値:
        Date。入力解析ができない場合はnull
      • parseObject

        public Object parseObject​(String source,
                                  ParsePosition pos)
        文字列からテキストを解析してDateを生成します。

        メソッドはposによって指定されたインデックスを開始位置としてテキストの解析を試みます。 解析が完了すると、posのインデックスは、使用された最後の文字(解析では、文字列の最後までのすべての文字が使用されるとは限らない)のあとのインデックスに更新され、解析された日付が返されます。 更新されたposは、このメソッドの次の呼出しの開始点を示すのに使用できます。 エラーが発生した場合は、posのインデックスは変更されず、エラーが発生した文字のインデックスにposのエラー・インデックスが設定され、nullが返されます。

        日付の解析の詳細については、parse(String, ParsePosition)メソッドを参照してください。

        定義:
        parseObject、クラス: Format
        パラメータ:
        source - 部分的に解析されるString
        pos - 上記のインデックスおよびエラー・インデックス情報を持つParsePositionオブジェクト
        戻り値:
        文字列から解析されるDate エラーの場合はnullを返す。
        例外:
        NullPointerException - sourceまたはposがnullの場合。
      • getTimeInstance

        public static final DateFormat getTimeInstance​(int style,
                                                       Locale aLocale)
        指定されたロケールに対し、指定されたフォーマット・スタイルを持つ時刻フォーマッタを取得します。
        パラメータ:
        style - 指定するフォーマット・スタイル。 たとえば、USロケールでのh:mm aに対するSHORT。
        aLocale - 指定されたロケール。
        戻り値:
        時刻フォーマッタ。
      • getDateInstance

        public static final DateFormat getDateInstance​(int style,
                                                       Locale aLocale)
        指定されたロケールに対し、指定されたフォーマット・スタイルを持つ日付フォーマッタを取得します。
        パラメータ:
        style - 指定するフォーマット・スタイル。 たとえば、USロケールでのM/d/yyに対するSHORT。
        aLocale - 指定されたロケール。
        戻り値:
        日付フォーマッタ。
      • getDateTimeInstance

        public static final DateFormat getDateTimeInstance​(int dateStyle,
                                                           int timeStyle,
                                                           Locale aLocale)
        指定されたロケールに対し、指定されたフォーマット・スタイルを持つ日時フォーマッタを取得します。
        パラメータ:
        dateStyle - 指定する日付フォーマット・スタイル。
        timeStyle - 指定する時刻フォーマット・スタイル。
        aLocale - 指定されたロケール。
        戻り値:
        日時フォーマッタ。
      • getInstance

        public static final DateFormat getInstance()
        日付と時間の両方に対しSHORTスタイルを持つ日時フォーマッタを取得します。
        戻り値:
        日時フォーマッタ
      • getAvailableLocales

        public static Locale[] getAvailableLocales()
        このクラスのget*Instanceメソッドがローカライズされたインスタンスを返すことのできるロケールすべての配列を返します。 返される配列は、JavaランタイムおよびインストールされているDateFormatProvider実装によってサポートされているロケールの和集合を表します。 これには、Locale.USと等価なLocaleインスタンスが少なくとも1つ含まれている必要があります。
        戻り値:
        ローカライズされたDateFormatインスタンスを使用可能なロケールの配列。
      • setCalendar

        public void setCalendar​(Calendar newCalendar)
        この日付フォーマットで使用するカレンダを設定します。 最初は、指定されたロケールまたはデフォルトのロケールに対し、デフォルトのカレンダが使用されます。

        以前に設定されたTimeZoneおよび非厳密の値はすべて、newCalendarの値で上書きされます。

        パラメータ:
        newCalendar - 日付フォーマットで使用する新しいCalendar
      • getCalendar

        public Calendar getCalendar()
        この日時フォーマッタに対応するカレンダを取得します。
        戻り値:
        この日時フォーマッタに対応するカレンダ。
      • setNumberFormat

        public void setNumberFormat​(NumberFormat newNumberFormat)
        数値フォーマッタを設定します。
        パラメータ:
        newNumberFormat - 指定する新しいNumberFormat。
      • getNumberFormat

        public NumberFormat getNumberFormat()
        時間のフォーマットと解析のためにこの日時フォーマッタが使用する数値フォーマッタを取得します。
        戻り値:
        この日時フォーマッタが使用する数値フォーマッタ。
      • setTimeZone

        public void setTimeZone​(TimeZone zone)
        このDateFormatオブジェクトのカレンダのタイムゾーンを設定します。 このメソッドは次の呼び出しと等価です。
        
         getCalendar().setTimeZone(zone)
         

        このメソッドで設定されたTimeZoneは、setCalendarの呼出しで上書きされます。

        parseメソッドの呼出しの結果として、このメソッドで設定されたTimeZoneが上書きされる可能性があります。

        パラメータ:
        zone - 指定する新しいタイムゾーン。
      • getTimeZone

        public TimeZone getTimeZone()
        タイムゾーンを取得します。 このメソッドは次の呼び出しと等価です。
        
         getCalendar().getTimeZone()
         
        戻り値:
        DateFormatのカレンダに対応するタイムゾーン。
      • setLenient

        public void setLenient​(boolean lenient)
        日時解析を厳密に行うかどうかを設定します。 厳密でない解析では、解析機能は、ヒューリスティックな方法を使って、このオブジェクトのフォーマットと完全には一致しない入力を解釈することがあります。 厳密な解析では、入力はこのオブジェクトのフォーマットと一致する必要があります。

        このメソッドは次の呼び出しと等価です。

        
         getCalendar().setLenient(lenient)
         

        この非厳密の値は、setCalendar()の呼出しによって上書きされます。

        パラメータ:
        lenient - trueの場合は厳密ではない解析
        関連項目:
        Calendar.setLenient(boolean)
      • isLenient

        public boolean isLenient()
        日時の解析を厳密に行うかどうかを判定します。 このメソッドは次の呼び出しと等価です。
        
         getCalendar().isLenient()
         
        戻り値:
        calendarが非厳密である場合はtrue、それ以外の場合はfalse
        関連項目:
        Calendar.isLenient()
      • equals

        public boolean equals​(Object obj)
        equalsをオーバーライドします。
        オーバーライド:
        equals 、クラス:  Object
        パラメータ:
        obj - 比較対象の参照オブジェクト。
        戻り値:
        このオブジェクトがobj引数と同じである場合はtrue、それ以外の場合はfalse
        関連項目:
        Object.hashCode()HashMap
      • clone

        public Object clone()
        Cloneableをオーバーライドします。
        オーバーライド:
        clone、クラス: Format
        戻り値:
        このインスタンスの複製。
        関連項目:
        Cloneable