Javaの現在日時の取得と表示形式のサンプルです。
目次
- ローカルの現在日時を取得(LocalDateTimeクラス)
- ローカルの日付または時刻のみを取得(LocalDate/LocalTimeクラス)
- タイムゾーンの現在日時を取得(ZonedDateTimeクラス)
- Dateクラスで取得する(従来のやり方)
ローカルの現在日時を取得(LocalDateTimeクラス)
ローカルの現在日時を取得するサンプルです。指定の表示形式で出力します。
LocalDateTimeクラスとDateTimeFormatterクラスは、JavaSE8で導入されました。
package test1;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Test1 {
public static void main(String[] args) {
// 現在日時を取得
LocalDateTime d = LocalDateTime.now();
System.out.println(d); //2018-02-11T13:02:49.380563400
// 表示形式を指定
DateTimeFormatter df1 =
DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss E");
String s = df1.format(d); //format(d)のdは、11行目のd
System.out.println(s); // 2018/02/11 13:02:49 日
// 表示形式を指定
DateTimeFormatter df2 =
DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH時mm分ss秒E曜日");
String s2 = df2.format(d); //format(d)のdは、11行目のd
System.out.println(s2); // 2018年02月11日 13時02分49秒日曜日
}
}
16行目は、DateTimeFormatterクラスのofPatternメソッドで"yyyy/MM/dd HH:mm:ss 曜日"の形式を指定しています。
22行目は、DateTimeFormatterクラスのofPatternメソッドでyyyy年MM月dd日 HH時mm分ss秒E曜日の形式を指定しています。
27行目は、LocalDateクラスのnowメソッドで現在日付を取得しています。
31行目は、LocalTimeクラスのnowメソッドで現在時刻を取得しています。
LocalDateTimeクラス
- タイムゾーンのない日付/時間を扱います。
- nowメソッドで現在日時を取得できます。
- JavaSE8で導入されました。Date and Time APIと呼ばれています。
- イミュータブルかつスレッドセーフです。
- ISO8601をベースにしています。ISO8601は、日付と時刻の表記に関する国際規格です。
https://ja.wikipedia.org/wiki/ISO_8601 - 以下は、Java8 API仕様のLocalDateTimeクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDateTime.html
イミュータブル
- インスタンスを作成した後、そのインスタンスの状態が変わらないことです。
- 日付を加算をしても元のインスタンスは変わらず新しいインスタンスを返します。
- Calendarクラスのインスタンスは状態を変えることができます。→ミュータブルです。
DateTimeFormatterクラス
- 日時を指定した表示形式にします。
- JavaSE8で導入されました。
- 以下は、Java8 API仕様のDateTimeFormatterクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/format/DateTimeFormatter.html
ローカルの日付または時刻のみを取得(LocalDate/LocalTimeクラス)
現在日付のみ取得する場合は、LocalDateクラスを使用します。
現在の時刻のみを取得する場合は、LocalTimeクラスを使用します。
LocalDateクラスとLocalTimeクラスは、JavaSE8で導入されました。
package test1;
import java.time.LocalDate;
import java.time.LocalTime;
public class Test1 {
public static void main(String[] args) {
// 現在の日付のみを取得
LocalDate d1 = LocalDate.now();
System.out.println(d1); //2018-02-11
// 現在の時刻のみを取得
LocalTime t1 = LocalTime.now();
System.out.println(t1); //18:55:25.544306600
}
}
タイムゾーンの現在日時を取得(ZonedDateTimeクラス)
タイムゾーンの現在日時を取得するサンプルです。指定の表示形式で出力します。
ZonedDateTimeクラスは、JavaSE8で導入されました。
package test1;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class Test1 {
public static void main(String[] args) {
// 現在日時を取得
ZonedDateTime d
= ZonedDateTime.now(ZoneId.of("America/Los_Angeles"));
// = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(d);
// 2018-02-10T20:11:40.213604300-08:00[America/Los_Angeles]
// 表示形式を指定
DateTimeFormatter df1 =
DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss E");
String s = df1.format(d); //format(d)のdは、11行目のd
System.out.println(s); // 2018/02/10 20:11:40 土
// 表示形式を指定
DateTimeFormatter df2 =
DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH時mm分ss秒E曜日");
String s2 = df2.format(d); //format(d)のdは、11行目のd
System.out.println(s2); // 2018年02月10日 20時11分40秒土曜日
}
}
12行目は、タイムゾーンIDにAmerica/Los_Angelesを指定しています。
日本を指定する場合は、13行目のようにAsia/Tokyoを指定します。
ZonedDateTimeクラス(タイムゾーン)
- タイムゾーン付きの日付/時間を扱います。
- nowメソッドで現在日時を取得できます。
- JavaSE8で導入されました。Date and Time APIと呼ばれています。
- イミュータブルかつスレッドセーフです。
- ISO8601をベースにしています。ISO8601は、日付と時刻の表記に関する国際規格です。
https://ja.wikipedia.org/wiki/ISO_8601 - 以下は、Java8 API仕様のZonedDateTimeクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/ZonedDateTime.html
ZoneIdクラス
- タイムゾーンを取得します。
- JavaSE8で導入されました。
- 以下は、Java8 API仕様のZoneIdクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/ZoneId.html
Dateクラスで取得する(従来のやり方)
現在日時を取得するサンプルです。指定の表示形式で出力します。
package test1;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test1 {
public static void main(String[] args) {
// 現在日時を取得
Date d = new Date();
System.out.println(d); //Fri Aug 05 00:28:47 GMT+09:00 2016
// 表示形式を指定
SimpleDateFormat d1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String q1 = d1.format(d); // format(d)のdは、10行目のd
System.out.println(q1); // 2016/08/05 00:28:47
// 表示形式を指定
SimpleDateFormat d2 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒");
String q2 = d2.format(d); // format(d)のdは、10行目のd
System.out.println(q2); // 2016年08月05日 00時28分47秒
}
}
Dateクラス
- 日付と時間を扱います。
- Unix時間(1970年1月1日0時0分0秒からの経過時間)をベースにしています。
https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93 - 以下は、Java8 API仕様のDateクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Date.html
SimpleDateFormatクラス
- 日時を指定した表示形式にします。
- 以下は、Java8 API仕様のSimpleDateFormatクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/text/SimpleDateFormat.html
関連の記事