工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java日付時刻完全ガイド:Date/Calendar/SimpleDateFormat/printf

java.util.Date クラス

現在日時をカプセル化。java.utilパッケージに属します。

コンストラクタ

#コンストラクタ説明
1Date()現在日時で初期化
2Date(long millisec)1970/1/1 00:00:00 GMTからのミリ秒数で初期化

主要メソッド

#メソッド説明
1after(Date)指定日時より後ならtrue
2before(Date)指定日時より前ならtrue
3clone()Dateオブジェクト複製
4compareTo(Date)比較:等しければ0、前なら負、後なら正
5compareTo(Object)Date以外ならClassCastException
6equals(Object)同一日時ならtrue
7getTime()1970/1/1からのミリ秒数返却
8hashCode()ハッシュコード返却
9setTime(long)ミリ秒数で日時設定
10toString()文字列変換

現在日時取得

import java.util.Date;
Date date = new Date();
System.out.println(date.toString());  // 例: Mon May 04 09:51:52 CDT 2009

日付比較の3方法

  1. getTime()でミリ秒取得し数値比較
  2. before()/after()/equals()使用
  3. compareTo()使用(Comparable実装)

SimpleDateFormat によるフォーマット/パース

ロケール対応の日付フォーマット/パース具象クラス。ユーザー定義パターン指定可能。

フォーマット例

import java.util.*; import java.text.*;
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
// 出力: Sun 2004.07.18 at 04:14:09 PM PDT

SimpleDateFormat パターン文字

文字意味例
G紀元AD
y4桁年2001
M年内月July / 07
d月内日10
h午前/午後時(1-12)12
H日内時(0-23)22
m時内分30
s分内秒55
Sミリ秒234
E曜日名Tuesday
D年内日番号360
F月内曜日序数2 (7月の第2水曜)
w年内週番号40
W月内週番号1
aAM/PMマーカーPM
k日内時(1-24)24
K午前/午後時(0-11)10
zタイムゾーン名Eastern Standard Time
'テキストエスケープ区切り
"一重引用符`

printf による日付フォーマット

%tで始まる2文字フォーマットを使用。引数インデックス%1$やフラグ%<で同一引数再利用可能。

基本例

Date date = new Date();
String str = String.format("Current Date/Time : %tc", date);
System.out.printf(str);  // Sat Dec 15 16:37:57 MST 2012

引数インデックス再利用

System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
// Due date: February 09, 2004

<フラグ再利用

System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
// Due date: February 09, 2004

printf日付変換文字一覧

文字説明例
c完全日時Mon May 04 09:51:52 CDT 2009
FISO 8601日付2004-02-09
D米国形式日付02/09/2004
T24時間時刻18:05:19
r12時間時刻06:05:19 pm
R24時間時刻(秒なし)18:05
Y4桁年2004
y年下2桁04
C年上2桁20
Bフル月名February
b省略月名Feb
m2桁月02
d2桁日03
e日(先頭ゼロなし)9
Aフル曜日名Monday
a省略曜日名Mon
j年内日(3桁)069
H2桁時(00-23)18
k時(0-23,ゼロなし)18
I2桁時(01-12)06
l時(1-12,ゼロなし)6
M2桁分05
S2桁秒19
L3桁ミリ秒047
N9桁ナノ秒047000000
P大文字AM/PMPM
p小文字am/pmpm
zRFC822 GMTオフセット-0800
Zタイムゾーン名PST
s1970からの秒数1078884319
Q1970からのミリ秒数1078884319047

文字列からDateへのパース

SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
String input = "1818-11-11";
Date t = ft.parse(input);  // ParseException補足必要
// Wed Nov 11 00:00:00 EST 1818

スリープと経過時間測定

Thread.sleep()

Thread.sleep(5*60*10);  // 3秒スリープ

経過時間測定

long start = System.currentTimeMillis();
Thread.sleep(5*60*10);
long end = System.currentTimeMillis();
System.out.println("Difference is : " + (end - start));  // 約5993ms

GregorianCalendar クラス

グレゴリオ暦実装の具象Calendarクラス。getInstance()で現在日時のインスタンス取得。フィールド:AD, BC。

主なコンストラクタ

#コンストラクタ
1GregorianCalendar()
2GregorianCalendar(year, month, date)
3GregorianCalendar(year, month, date, hour, minute)
4GregorianCalendar(year, month, date, hour, minute, second)
5GregorianCalendar(Locale)
6GregorianCalendar(TimeZone)
7GregorianCalendar(TimeZone, Locale)

便利メソッド抜粋

#メソッド説明
1add(field, amount)指定フィールドに量加算(カレンダールール準拠)
2get(field)フィールド値取得
3getActualMaximum(field)現在日付でのフィールド最大値
4isLeapYear(year)閏年判定
5roll(field, up)大きいフィールド変更せず単位加減算
6set(field, value)フィールド値設定
7setTime(Date)Dateで時刻設定
8setTimeZone(TimeZone)タイムゾーン設定

使用例

GregorianCalendar gcal = new GregorianCalendar();
String[] months = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
System.out.print("Date: " + months[gcal.get(Calendar.MONTH)] + " " + gcal.get(Calendar.DATE) + " " + gcal.get(Calendar.YEAR));
System.out.print("Time: " + gcal.get(Calendar.HOUR) + ":" + gcal.get(Calendar.MINUTE) + ":" + gcal.get(Calendar.SECOND));
if (gcal.isLeapYear(gcal.get(Calendar.YEAR)))
  System.out.println("The current year is a leap year");
else
  System.out.println("The current year is not a leap year");
Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year

モダンな代替:java.time パッケージ(Java 8+)

Java 8以降ではjava.timeパッケージ(LocalDate, LocalDateTime, ZonedDateTime, DateTimeFormatter等)の使用が強く推奨されます。 スレッドセーフ、不変、直感的API、タイムゾーン対応が充実しています。Date/CalendarはレガシーAPIとして位置づけられています。

Java

  1. C# クラスとオブジェクト:堅牢な OOP の基礎
  2. Pythonで現在の日付と時刻を取得する実践ガイド
  3. Java変数とリテラル:包括的ガイド
  4. Javaの式、文、ブロックを理解する
  5. Javaクラスとオブジェクト:実践ガイド
  6. Java抽象クラスとメソッド:包括的ガイド
  7. Javaネストクラスとインナークラス完全ガイド:種類、例、ベストプラクティス
  8. Javaシングルトンパターン完全解説:安全な実装と活用法
  9. Java throw vs throws:実践例でマスターする例外ハンドリング
  10. Javaオートボクシングとアンボクシング完全ガイド:実例とベストプラクティス
  11. Javaオブジェクト直列化: オブジェクトの持続化と復元(Serializable/transient/ObjectOutputStream)