Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのSimpleDateFormatクラスとは?文字列と日付の相互変換を徹底解説

java.text.SimpleDateFormatクラスは、文字列を日付(Dateオブジェクト)に変換する「解析(パース)」や、日付を指定した書式の文字列に整える「フォーマット」を行うために使用されるクラスです。

日付文字列の解析(パース)方法

このクラスのコンストラクタの一つは、希望する日付書式を表す文字列を受け取り、SimpleDateFormatオブジェクトを生成します。文字列をDateオブジェクトとして解析・変換するには、以下の手順に従います。

  • 目的の書式パターン文字列を引数に渡して、SimpleDateFormatクラスをインスタンス化する。
  • parse()メソッドを使用して、日付文字列を解析し、Dateオブジェクトとして取得する。

サンプルコード

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
    public static void main(String args[]) throws ParseException {
        String date_string = "2007-25-06";
        // SimpleDateFormatクラスのインスタンス化
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-dd-MM");
        // 指定した文字列をDateオブジェクトへ変換
        Date date = formatter.parse(date_string);
        System.out.println("Date value: "+date);
    }
}

実行結果

Date value: Mon Jun 25 00:00:00 IST 2007

主な書式パターンの意味

コンストラクタに渡すパターン文字列は、以下のような記号で構成されます。

  • yyyy … 西暦年(4桁)
  • MM … 月(2桁)
  • dd … 日(2桁)
  • HH:mm:ss … 時・分・秒

上記の例では「yyyy-dd-MM」と指定しているため、「2007-25-06」は「2007年6月25日」として正しく解析されます。

現在の書式パターン文字列を取得する

このクラスが持つtoPattern()メソッドは、現在のオブジェクトの書式を表すパターン文字列を返します。

サンプルコード

import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Demo {
    public static void main(String args[]) throws ParseException {
        SimpleDateFormat obj = new SimpleDateFormat();
        String pattern = obj.toPattern();
        System.out.println(pattern);
    }
}

実行結果

M/d/yy h:mm a

引数なしでインスタンス化した場合、実行環境のロケール(地域設定)に応じたデフォルトのパターンが適用されます。

テキストの中から日付部分だけを解析する

parse()メソッドは、日付文字列に加えてParsePositionオブジェクトを引数として受け取ることもできます。これにより、長いテキストの中から指定位置以降の日付部分だけを抜き出して解析できます。

サンプルコード

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
    public static void main(String args[]) throws ParseException {
        String text = "Marriage date of Samrat is 2007-25-06";
        // SimpleDateFormatクラスのインスタンス化
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-dd-MM");
        // テキスト内の27文字目から日付を解析
        ParsePosition pos = new ParsePosition(27);
        Date date = formatter.parse(text, pos);
        System.out.println("Date value: "+date);
    }
}

実行結果

Date value: Mon Jun 25 00:00:00 IST 2007

このようにParsePositionで開始位置を指定することで、文章中に埋め込まれた日付情報も柔軟に取り出せます。


  1. JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説

    StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T

  2. JavaのString intern()メソッドとは?その役割と使い方をわかりやすく解説

    JavaにおけるStringクラスの基本Stringは、Javaで一連の文字(文字列)を格納するためのクラスで、java.langパッケージに属しています。Stringオブジェクトは一度生成すると内容を変更できない「イミュータブル(不変)」という特性を持っています。文字列の保存場所すべてのStringオブジェクトは、ヒープ領域内にある「文字列定数プール(String Constant Pool)」と呼ばれる専用のメモリ領域に格納されます。文字列リテラルを定義するたびに、JVMは文字列定数プール内にその値を持つStringオブジェクトを生成します。そのため、同じ内容の文字列リテラルが複数存在して