文字列を日付に変換する方法– 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]