文字列を日付に変換する方法 - Java

文字列を日付に変換する方法– Java

このチュートリアルでは、文字列をjava.util.Dateに変換する方法を示します。 多くのJava初心者は日付変換にこだわっています。この概要ガイドが何らかの形で役立つことを願っています。

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

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

java.text.SimpleDateFormatで使用される一般的な日付と時刻のパターンのいくつかについては、以下の表を参照してください。このJavaDocを参照してください。

文字

説明

y

Year

2013

M

年の月

7月7日、7日

d

月の日

1-31

E

週の曜日名

金曜日、日曜日

a

Am/pm marker

午前午後

H

日中の時間

0-23

h

午前/午後の時間

1-12

m

時間単位の分

0-60

s

分で2番目

0-60

Note
このJava 8の例に興味があるかもしれません–How to convert String to LocalDate

1. 文字列= 2013年6月7日

3 'M'の場合、月はテキスト(月-12月)として解釈され、そうでない場合は番号(01-12)として解釈されます。

TestDateExample1.java

package com.example.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. 文字列= 2013/07/07

TestDateExample2.java

package com.example.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. 文字列=金、2013年6月7日

TestDateExample3.java

package com.example.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. 文字列= 2013年6月7日金曜日12:10:56 PM

TestDateExample4.java

package com.example.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. 文字列= 2014-10-05T15:23:01Z

ZサフィックスはUTCを意味し、java.util.SimpleDateFormatはそれを正しく解析しません。サフィックスZを「+0000」に置き換える必要があります。

TestDateExample5.java

package com.example.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.example.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]