Javaに基づく日付処理
Java日時
java.utilパッケージは、現在の日付と時刻をカプセル化するDateクラスを提供します。
Dateクラスのコンストラクタ:
-
現在の日付と時刻を使用してオブジェクトを初期化します。
-
Date();
-
1970年1月1日からのミリ秒数であるパラメーターを受け取ります。
-
Date(long millisec)
Dateクラスの関連メソッド:
シリアルナンバー | 方法と説明 |
---|---|
1 | boolean after(Date date)は、このメソッドを呼び出すDateオブジェクトが指定された日付より後にある場合はtrueを返し、それ以外の場合はfalseを返します。 |
2 | boolean before(Date date)は、このメソッドを呼び出すDateオブジェクトが指定された日付より前の場合はtrueを返し、それ以外の場合はfalseを返します。 |
3 | オブジェクトclone()は、このオブジェクトのコピーを返します。 |
4 | int compareTo(Date date)は、このメソッドが呼び出されたときにDateオブジェクトを指定された日付と比較します。2つが等しい場合、0を返します。呼び出し元のオブジェクトは、指定された日付の前に負の数を返します。呼び出し元のオブジェクトは、指定された日付の後に正の数を返します。 |
5 | int compareTo(Object obj) objが日付型の場合、操作はcompareTo(Date)と同等です。それ以外の場合はClassCastExceptionをスローします。 |
6 | boolean equals(Object date)は、このメソッドを呼び出すDateオブジェクトが指定された日付と等しい場合はtrueを返し、そうでない場合はfalseを返します。 |
7 | getTime()は、1970年1月1日00:00:00 GMT以降、このDateオブジェクトが表すミリ秒数を返します。 |
8 | int hashCode()は、このオブジェクトのハッシュコード値を返します。 |
9 | void setTime(long time) 1970年1月1日00:00:00 GMT以降の日時をミリ秒で設定します。 |
10 | String toString()は、このDateオブジェクトを次の形式のStringに変換します。 |
日付比較
Javaは次の3つのメソッドを使用して2つの日付を比較します。
- getTime()メソッドを使用して2つの日付(1970年1月1日からのミリ秒数)を取得し、2つの値を比較します。
- メソッドbefore()、after()、equals()を使用します。たとえば、月の12日が18日より早い場合、new Date(99、2、12).before(new Date(99、2、18))はtrueを返します。
- Comparableインターフェースで定義されているcompareTo()メソッドを使用します。Dateクラスがこのインターフェースを実装します。
日付のフォーマット:
-
SimpleDateFormatクラスを使用して日付をフォーマットします。
import java.util.*; import java.text.*; public class DateDemo { public static void main(String args[]) { Date dNow = new Date( ); SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); System.out.println("当前时间为: " + ft.format(dNow)); } }
日付と時刻のフォーマットコード:
文字 | 解説 | 例 |
---|---|---|
G | エポックマーク | 広告 |
そして | 四年間 | 2001年 |
M | 月 | 7月または07 |
d | 月の日 | 10 |
h | AM / PM(1〜12)形式の時間 | 12 |
H | 時間(0〜23) | 22 |
メートル | 議事録 | 30 |
s | 秒 | 55 |
S | ミリ秒 | 234 |
E | 曜日 | 火曜日 |
D | 年間通算日 | 360 |
F | 月の曜日 | 2(7月の第2水曜日) |
w | 年の週 | 40 |
W | その月の最初の数週間 | 1 |
a | AM / PMマーク | 午後 |
k | 時間(1〜24) | 24 |
K | AM / PM(0〜11)形式の時間 | 10 |
と | タイムゾーン | 東部標準時 |
」 | テキスト区切り文字 | デリミタ |
」 | アポストロフィ | ` |
- printfを使用して日付をフォーマットします。
printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。
转 换 符 | 说 明 | 示 例 |
---|---|---|
c | 包括全部日期和时间信息 | 星期六 十月 27 14:21:20 CST 2007 |
F | "年-月-日"格式 | 2007-10-27 |
D | "月/日/年"格式 | 10/27/07 |
r | "HH:MM:SS PM"格式(12时制) | 02:25:51 下午 |
T | "HH:MM:SS"格式(24时制) | 14:28:16 |
R | "HH:MM"格式(24时制) | 14:28 |
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
//c的使用
System.out.printf("全部日期和时间信息:%tc%n",date);
//f的使用
System.out.printf("年-月-日格式:%tF%n",date);
//d的使用
System.out.printf("月/日/年格式:%tD%n",date);
//r的使用
System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
//t的使用
System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
//R的使用
System.out.printf("HH:MM格式(24时制):%tR",date);
}
}
解析字符串为时间
SimpleDateFormat 类有一些附加的方法,特别是parse(),它试图按照给定的SimpleDateFormat 对象的格式化存储来解析字符串。例如:
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date( ) + "\n");
Thread.sleep(1000*3); // 休眠3秒
System.out.println(new Date( ) + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
以上实例编译运行结果如下:
$ java DateDemo
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007
测量时间:
import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Calendar类
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
-
默认当前日期:
Calendar c = Calendar.getInstance();//默认是当前日期
-
指定日期:
//创建一个代表2009年6月12日的Calendar对象 Calendar c1 = Calendar.getInstance(); c1.set(2009, 6 - 1, 12);
Calendar类对象字段类型
常量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期,和上面的字段意义完全相同 |
Calendar.HOUR | 12小时制的小时 |
Calendar.HOUR_OF_DAY | 24小时制的小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 星期几 |
- 把 c1对象代表的日期设置为10号,其它所有的数值会被重新计
c1.set(Calendar.DATE,10);
- 把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算
c1.set(Calendar.YEAR,2008);
- 把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
- 把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
Calendar类对象信息的获得
Calendar c1 = Calendar.getInstance();
// 获得年份
int year = c1.get(Calendar.YEAR);
// 获得月份
int month = c1.get(Calendar.MONTH) + 1;
// 获得日期
int date = c1.get(Calendar.DATE);
// 获得小时
int hour = c1.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c1.get(Calendar.MINUTE);
// 获得秒
int second = c1.get(Calendar.SECOND);
// 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
int day = c1.get(Calendar.DAY_OF_WEEK);
GregorianCalendar类
Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。
下面列出GregorianCalendar对象的几个构造方法:
序号 | 构造函数和说明 |
---|---|
1 | GregorianCalendar() 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。 |
2 | GregorianCalendar(int year, int month, int date) 在具有默认语言环境的默认时区内构造一个带有给定日期设置的 GregorianCalendar |
3 | GregorianCalendar(int year, int month, int date, int hour, int minute) 为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。 |
4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) 为具有默认语言环境的默认时区构造一个具有给定日期和时间设置的 GregorianCalendar。 |
5 | GregorianCalendar(Locale aLocale) 在具有给定语言环境的默认时区内构造一个基于当前时间的 GregorianCalendar。 |
6 | GregorianCalendar(TimeZone zone) 在具有默认语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。 |
7 | GregorianCalendar(TimeZone zone, Locale aLocale) 在具有给定语言环境的给定时区内构造一个基于当前时间的 GregorianCalendar。 |
这里是GregorianCalendar 类提供的一些有用的方法列表:
序号 | 方法和说明 |
---|---|
1 | void add(int field, int amount) 根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。 |
2 | protected void computeFields() 转换UTC毫秒值为时间域值 |
3 | protected void computeTime() 覆盖Calendar ,转换时间域值为UTC毫秒值 |
4 | boolean equals(Object obj) 比较此 GregorianCalendar 与指定的 Object。 |
5 | int get(int field) 获取指定字段的时间值 |
6 | int getActualMaximum(int field) 返回当前日期,给定字段的最大值 |
7 | int getActualMinimum(int field) 返回当前日期,给定字段的最小值 |
8 | int getGreatestMinimum(int field) 返回此 GregorianCalendar 实例给定日历字段的最高的最小值。 |
9 | Date getGregorianChange() 获得格里高利历的更改日期。 |
10 | int getLeastMaximum(int field) 返回此 GregorianCalendar 实例给定日历字段的最低的最大值 |
11 | int getMaximum(int field) 返回此 GregorianCalendar 实例的给定日历字段的最大值。 |
12 | Date getTime() 获取日历当前时间。 |
13 | long getTimeInMillis() 获取用长整型表示的日历的当前时间 |
14 | TimeZone getTimeZone() 获取时区。 |
15 | int getMinimum(int field) 返回给定字段的最小值。 |
16 | int hashCode() 重写hashCode. |
17 | boolean isLeapYear(int year) 确定给定的年份是否为闰年。 |
18 | void roll(int field, boolean up) 在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。 |
19 | void set(int field, int value) 用给定的值设置时间字段。 |
20 | void set(int year, int month, int date) 设置年、月、日的值。 |
21 | void set(int year、int month、int date、int hour、int minute)年、月、日、時、分の値を設定します。 |
22 | void set(int year、int month、int date、int hour、int minute、int second)年、月、日、時、分、秒の値を設定します。 |
23 | void setGregorianChange(Date date) GregorianCalendarの変更日を設定します。 |
24 | void setTime(Date date)カレンダーの現在の時刻を指定された日付に設定します。 |
25 | void setTimeInMillis(long millis)指定された長いミリ秒でカレンダーの現在の時刻を設定します。 |
26日 | void setTimeZone(TimeZone value)現在のタイムゾーンを、指定されたタイムゾーンの値で設定します。 |
27日 | String toString()は、カレンダーを表す文字列を返します。 |
import java.util.*;
public class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = {
"Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"};
int year;
// 初始化 Gregorian 日历
// 使用当前时间和日期
// 默认为本地时间和时区
GregorianCalendar gcalendar = new GregorianCalendar();
// 显示当前时间和日期的信息
System.out.print("Date: ");
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
System.out.println(year = gcalendar.get(Calendar.YEAR));
System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
// 测试当前年份是否为闰年
if(gcalendar.isLeapYear(year)) {
System.out.println("当前年份是闰年");
}
else {
System.out.println("当前年份不是闰年");
}
}
}
演算結果:
Date: Apr 22 2009
Time: 11:25:27
当前年份不是闰年
注:カレンダーの月は0から始まりますが、日付と年はどちらも1から始まります。
*免責事項:このブログ投稿は個人的な学習ノートであり、新人チュートリアルやその他のネットワークリソースを参照しています。侵害がある場合は、プライベートメッセージでお知らせください。*