■ Java 日付・時刻処理
□ 概要
・日付や時刻の処理は難しいものではないが、出現頻度が高い
・java.util.Dateは、ほとんどのコンストラクタ、メソッドが非推奨になっていて使えない
・主にjava.util.Calendarとjava.text.SimpleDateFormatを使用する
java.util.Dateも非推奨でないメソッドは使用してもよい
・ロジック的な部分はCalendarで処理し、Stringとの変換ではSimpleDateFormatを使用する
・DateやCalendarは、内部的にはmili secondでデータを保持しているので、場合によっては、日付と時刻をきちんと切り分けて処理する必要がある
・プロジェクトでは、日付・時刻関連の処理は、共通クラスを作成して、他の部分では、その共通クラスを使用することが望ましい
□ 日時→文字列
--
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* Calendar0 日時を取得し表示する
*/
class Calendar0 {
public static void main(String[] args) {
// 引数の文字列を変えることにより、いろいろな形で表示できる
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
print(sdf.format(cal.getTime()));
// 一日前に進める
cal.add(Calendar.DATE, 1);
print(sdf.format(cal.getTime()));
}
private static void print(String s) {
System.out.println(s);
}
}
--
□ 文字列→日時
--
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Calendar1 文字列を日時に変換する
*/
class Calendar1 {
public static void main(String[] args) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
// 正しい文字列
String s = "2014/10/25";
Date date = sdf.parse(s);
print(date);
// 正しくない文字列
s = "2014-10-25";
date = sdf.parse(s);
print(date);
}
catch(Exception ex) {
ex.printStackTrace();
}
finally {
// 処理なし
}
}
private static void print(Date date) {
System.out.println(date.toString());
}
}
--
□ 日時の比較など
--
import java.util.Calendar;
/**
* Calendar2 日時の比較などのサンプル
*/
class Calendar2 {
public static void main(String[] args) {
Calendar cal0 = Calendar.getInstance();
Calendar cal1 = Calendar.getInstance();
//
print("同じ日時の比較");
print(cal0.before(cal1));
print(cal0.equals(cal1));
print(cal0.after(cal1));
//
// 一日前に戻す
cal0.add(Calendar.DATE, -1);
print("違う日時の比較");
print(cal0.before(cal1));
print(cal0.equals(cal1));
print(cal0.after(cal1));
}
private static void print(boolean b) {
print(b+"");
}
private static void print(String s) {
System.out.println(s);
}
}
--
□ ロケール
・ロケールとは地域的・文化的な分類のこと
・日時を文字列で表現する場合にロケールによって形式が異なる
・通貨の単位などもロケールで扱うことができる
・ロケールクラス内に各ロケールを表す定数が定義されている
日本ではLocale.JAPANとLocale.JAPANESE
前者は日本国、後者は日本語を意味する
・日付・時刻関連の処理においては、ロケールの考慮が必要な場合があるが、通常の処理であれば、特に意識する必要はない
□ タイムゾーン
・日本国内における通常の日付・時刻処理を行う場合には、タイムゾーンは意識する必要はない
・以外の地域の日付・時刻処理を行う場合には、明示的にタイムゾーンを指定して処理する必要がある。
・タイムゾーンの例
US/Hawaii ハワイ標準時
America/Los_Angeles 太平洋標準時
America/Belize 中部標準時
America/New_York 東部標準時
Europe/London グリニッジ標準時
Europe/Paris 中部ヨーロッパ時間
Africa/Cairo 東ヨーロッパ時間
Asia/Kuwait アラビア標準時
Europe/Moscow モスクワ標準時
Asia/Calcutta インド標準時
Asia/Singapore シンガポール時間
Asia/Tokyo 日本標準時
□ フォーマットする際に指定する記号は、次のようなものを使用できる
yy 西暦年(2桁)
yyyy 西暦年(4桁)
M 月
MM 月
D 年に対する日
DDD 年に対する日
d 月に対する日
dd 月に対する日
w 年に対する週
W 月に対する週
E 曜日
F 月に対する曜日番号
a 午前午後
h 時(12時間制)
hh 時(12時間制)
H 時(24時間制)
HH 時(24時間制)
m 分
s 秒
ss 秒
S ミリ秒
SSS ミリ秒
==
・目次 Java Stringとjava.util
http://blogs.yahoo.co.jp/artery2020/39979089.html
・目次 - Java言語プログラミング入門
http://blogs.yahoo.co.jp/artery2020/39975776.html
・目次 - ビジネスパーソンの常識と非常識
http://blogs.yahoo.co.jp/artery2020/39728331.html
・目次 - 論理・発想・思考についての考察と鍛え方
http://blogs.yahoo.co.jp/artery2020/39657784.html
== ended.