Javaの現在日時の取得と表示形式のサンプルです。
目次
Java8から | 現在日時を取得し表示形式を指定する(LocalDateTimeクラス) |
タイムゾーンで現在日時を取得する(ZonedDateTimeクラス) | |
Java7以前可 | 現在日時を取得し表示形式を指定する(Dateクラス) |
現在日時を取得し表示形式を指定する(Calendarクラス) |
現在日時を取得し表示形式を指定する(LocalDateTimeクラス)
LocalDateTimeクラスで現在日時を取得し表示形式を指定するサンプルです。
LocalDateTimeクラスは、Java8で導入されました。
package test1;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Test1 {
public static void main(String[] args) {
LocalDateTime date1 = LocalDateTime.now();
System.out.println(date1); //2018-02-11T13:02:49.957
DateTimeFormatter dtformat1 =
DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS E");
String fdate1 = dtformat1.format(date1);
System.out.println(fdate1); // 2018/02/11 13:02:49.957 日
DateTimeFormatter dtformat2 =
DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH時mm分ss秒SSSミリ秒 E曜日");
String fdate2 = dtformat2.format(date1);
System.out.println(fdate2); // 2018年02月11日 13時02分49秒957ミリ秒 日曜日
DateTimeFormatter dtformat3 =
DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String fdate3 = dtformat3.format(date1);
System.out.println(fdate3); // 2018021113024
}
}
8行目は、LocalDateTimeクラスのnowメソッドで現在日時を取得しています。
11,12行目は、DateTimeFormatterクラスのofPatternメソッドで表示形式を指定しています。SSSはミリ秒です。
13行目は、DateTimeFormatterクラスのformatメソッドで設定しています。
表示形式の不要な項目は削除できます。Eは曜日ですが削除すると曜日なしで表示されます。
17行目は、年月日時分秒の表示形式を指定しています。
LocalDateTimeクラス
- タイムゾーンのない日付/時間を扱います。
- nowメソッドで現在日時を取得できます。
- Java8で導入されました。Date and Time APIと呼ばれています。
- イミュータブルかつスレッドセーフです。
- 以下は、Java8 API仕様のLocalDateTimeクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDateTime.html
イミュータブル
- インスタンスを作成した後、そのインスタンスの状態が変わらないことです。
- 日付を加算をしても元のインスタンスは変わらず新しいインスタンスを返します。
- Calendarクラスのインスタンスは状態を変えることができます。→ミュータブルです。
スレッドセーフ
- 複数のスレッドが同時に実行しても大丈夫です。
DateTimeFormatterクラス
- 日時を指定した表示形式にします。
- Java8で導入されました。
- 以下は、Java8 API仕様のDateTimeFormatterクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/format/DateTimeFormatter.html
タイムゾーンで現在日時を取得する(ZonedDateTimeクラス)
タイムゾーンで現在日時を取得するサンプルです。
ZonedDateTimeクラスは、Java8で導入されました。
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 date1
= ZonedDateTime.now(ZoneId.of("America/Los_Angeles"));
// = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(date1);
// 2018-02-10T07:32:30.808-08:00[America/Los_Angeles]
}
}
12行目は、タイムゾーンIDにAmerica/Los_Angelesを指定しています。
日本を指定する場合は、13行目のようにAsia/Tokyoを指定します。
SSSはミリ秒です。
ZonedDateTimeクラス(タイムゾーン)
- タイムゾーン付きの日付/時間を扱います。
- nowメソッドで現在日時を取得できます。
- Java8で導入されました。Date and Time APIと呼ばれています。
- イミュータブルかつスレッドセーフです。
- 以下は、Java8 API仕様のZonedDateTimeクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/ZonedDateTime.html
ZoneIdクラス
- タイムゾーンを取得します。
- Java8で導入されました。
- 以下は、Java8 API仕様のZoneIdクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/ZoneId.html
現在日時を取得し表示形式を指定する(Dateクラス)
Dateクラスで現在日時を取得し表示形式を指定するサンプルです。
package test1;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test1 {
public static void main(String[] args) {
// 現在日時を取得
Date date1 = new Date();
System.out.println(date1); //Fri Aug 05 00:28:47 JST 2016
// 表示形式を指定
SimpleDateFormat sdformat1
= new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
String fdate1 = sdformat1.format(date1);
System.out.println(fdate1); // 2016/08/05 00:28:47.646
// 表示形式を指定
SimpleDateFormat sdformat2
= new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒SSSミリ秒");
String fdate2 = sdformat2.format(date1);
System.out.println(fdate2); // 2016年08月05日 00時28分47秒646ミリ秒
}
}
10行目は、Dateクラスで現在日時を取得しています。
11行目は、取得した値ですが一般的な表示形式ではありません。
15行目は、SimpleDateFormatクラスでyyyy/MM/ddの表示形式を指定しています。ミリ秒を表示する場合は、SSSを指定します。
16行目は、表示形式を変換しています。
21行目は、年月日の形式を指定しています。
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
現在日時を取得し表示形式を指定する(Calendarクラス)
Calendarクラスで現在日時を取得し表示形式を指定するサンプルです。
package test1;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Test1 {
public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
// Date型に変換
Date date1 = cal1.getTime();
System.out.println(date1); //Sun Jan 01 22:30:10 JST 2017
// 表示形式を指定
SimpleDateFormat sdformat
= new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String fdate1 = sdformat.format(date1);
System.out.println(fdate1); // 2017/01/01 22:30:10
}
}
7行目は、CalendarクラスのgetInstanceメソッドで現在日時を取得しています。
9行目時点の変数cal1の中身は、・・,YEAR=2018,MONTH=2,・・などでYYYY/MM/DDの形式になっていません。
そのためこれ以降で、YYYY/MM/DDの表示形式にします。
12行目は、Date型に変換しています。
17行目のSimpleDateFormatクラスで表示形式を指定しています。
18行目は、指定した表示形式に変換しています。
Calendarクラス
- 日付と時間を扱います。
- Unix時間(1970年1月1日0時0分0秒からの経過時間)をベースにしています。
https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93 - 以下は、Java8 API仕様のCalendarクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Calendar.html
関連の記事