このチュートリアルでは、文字列を `java.util.Date`に変換する方法を説明します。多くのJavaの初心者は、日付の変換に固執しています、この要約のガイドがいくつかの点であなたを助けてくれることを願っています。

   //String -> Date
    SimpleDateFormat.parse(String);

   //Date -> String
    SimpleDateFormat.format(date);

java.text.SimpleDateFormatで使用される一般的な日付と時刻のパターンについては、次の表を参照してください。http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormatを参照してください。 html[JavaDoc]

| =================== |文字|説明|例| y |年| 2013 | M | 7月、7日、7日| d |日| 1月31日| E |曜日名|金曜日、日曜日| a | AM/PMマーカー| AM、PM | H | 1日の時間| 0 -23 | h |時間(午前/午後)| 1-12 | m |時間(分)| 0-60 |秒|分秒| 0-60 | =============== ==================

1. String = 7-Jun-2013

3 ‘M’の場合、月はテキスト(Mon-Dec)、それ以外は数字(01-12)と解釈されます。

TestDateExample1.java

package com.mkyong.date;

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

public class TestDateExample1 {

    public static void main(String[]argv) {

        SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
        String dateInString = "7-Jun-2013";

        try {

            Date date = formatter.parse(dateInString);
            System.out.println(date);
            System.out.println(formatter.format(date));

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

出力

Fri Jun 07 00:00:00 MYT 2013
07-Jun-2013

2. String = 07/06/2013

TestDateExample2.java

package com.mkyong.date;

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

public class TestDateExample2 {

    public static void main(String[]argv) {

        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        String dateInString = "07/06/2013";

        try {

            Date date = formatter.parse(dateInString);
            System.out.println(date);
            System.out.println(formatter.format(date));

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

出力

Fri Jun 07 00:00:00 MYT 2013
07/06/2013

3. String = Fri、2013年6月7日

TestDateExample3.java

package com.mkyong.date;

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

public class TestDateExample3 {

    public static void main(String[]argv) {

        SimpleDateFormat formatter = new SimpleDateFormat("E, MMM dd yyyy");
        String dateInString = "Fri, June 7 2013";

        try {

            Date date = formatter.parse(dateInString);
            System.out.println(date);
            System.out.println(formatter.format(date));

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

出力

Fri Jun 07 00:00:00 MYT 2013
Fri, Jun 07 2013

4. String = 2013年6月7日金曜日12:10:56 PM

TestDateExample4.java

package com.mkyong.date;

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

public class TestDateExample4 {

    public static void main(String[]argv) {

        SimpleDateFormat formatter = new SimpleDateFormat("EEEE, MMM dd, yyyy HH:mm:ss a");
        String dateInString = "Friday, Jun 7, 2013 12:10:56 PM";

        try {

            Date date = formatter.parse(dateInString);
            System.out.println(date);
            System.out.println(formatter.format(date));

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

出力

Fri Jun 07 12:10:56 MYT 2013
Friday, Jun 07, 2013 12:10:56 PM

5. String = 2014-10-05T15:23:01Z

Z接尾辞はUTCを意味し、 `java.util.SimpleDateFormat`は正しく解析しないので、接尾辞Zを ‘0000’に置き換える必要があります。

TestDateExample5.java

package com.mkyong.date;

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

public class TestDateExample5 {

    public static void main(String[]argv) {

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
        String dateInString = "2014-10-05T15:23:01Z";

        try {

            Date date = formatter.parse(dateInString.replaceAll("Z$", "+0000"));
            System.out.println(date);

            System.out.println("time zone : " + TimeZone.getDefault().getID());
            System.out.println(formatter.format(date));

        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

出力

Sun Oct 05 23:23:01 MYT 2014
time zone : Asia/Kuala__Lumpur
2014-10-05T23:23:01+0800

Java 8では、これを `java.time.Instant`オブジェクトに変換して、指定したタイムゾーンで表示することができます。

TestDateExample6.java

package com.mkyong.date;

import java.time.** ;

public class TestDateExample6 {

    public static void main(String[]argv) {

        String dateInString = "2014-10-05T15:23:01Z";

        Instant instant = Instant.parse(dateInString);

        System.out.println(instant);

       //get date time only
        LocalDateTime result = LocalDateTime.ofInstant(instant, ZoneId.of(ZoneOffset.UTC.getId()));

        System.out.println(result);

       //get date time + timezone
        ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Africa/Tripoli"));
        System.out.println(zonedDateTime);

       //get date time + timezone
        ZonedDateTime zonedDateTime2 = instant.atZone(ZoneId.of("Europe/Athens"));
        System.out.println(zonedDateTime2);

    }

}

出力

2014-10-05T15:23:01Z
2014-10-05T15:23:01
2014-10-05T17:23:01+02:00[Africa/Tripoli]2014-10-05T18:23:01+03:00[Europe/Athens]....

=== 参考文献

.  http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html[SimpleDateFormat

JavaDoc]。リンク://java8/java-8-how-to-convert-string-to-localdate/[Java 8  - どのように変換するか

StringをLocalDateに変換する]。 http://stackoverflow.com/questions/2580925/simpledateformat-parsing-date-with-z-literal[Stackoverflow

: simpledateformat parsing date with ‘Z’ literal]. https://en.wikipedia.org/wiki/ISO__8601[Wikipedia : ISO 8601]

.  https://docs.oracle.com/javase/tutorial/datetime/iso/timezones.html[Time

ゾーンとオフセットクラス]。 http://www.diffen.com/difference/GMT__vs__UTC[GMT VS UTC]

.  http://www.timeanddate.com/time/what-is-a-time-zone.html[Whatとは

タイムゾーン?]。 http://www.joda.org/joda-time/[Joda Time]

リンク://タグ/変換/[変換]リンク://タグ/日付/[日付]リンク://タグ/インスタント/[インスタント]リンク://タグ/java8/[java8]リンク://タグ/タイムゾーン/[タイムゾーン]