Java的java.util
包提供了Date
類,該類封裝了當前的日期和時間。Date
類支援兩個建構函式,如下表所示。
編號 | 建構函式 | 描述 |
---|---|---|
1 | Date() |
此建構函式使用當前日期和時間來初始化物件。 |
2 | Date(long millisec) |
此建構函式接受一個引數,該引數等於自1970年1月1日午夜以來經過的毫秒數。 |
以下是Date
類的方法列表 -
編號 | 方法 | 描述 |
---|---|---|
1 | boolean after(Date date) |
如果呼叫Date 物件包含的日期晚於date 指定的日期,則返回true ,否則返回false 。 |
2 | boolean before(Date date) |
如果呼叫Date 物件包含的日期早於date 指定的日期,則返回true ,否則返回false 。 |
3 | Object clone( ) |
複製呼叫的Date 物件。 |
4 | int compareTo(Date date) |
將呼叫物件的值與date 的值進行比較。 如果值相等則返回0 。 如果呼叫物件早於date ,則返回負值。 如果呼叫物件晚於date ,則返回正值。 |
5 | int compareTo(Object obj) |
如果obj 物件是Date 類物件,則與compareTo(Date) 操作相同。 否則,它會丟擲ClassCastException 。 |
6 | boolean equals(Object date) |
如果呼叫Date 物件包含與date 指定的時間和日期相同的時間和日期,則返回true ,否則返回false 。 |
7 | long getTime() |
返回自1970年1月1日以來經過的毫秒數。 |
8 | int hashCode() |
返回撥用物件的雜湊碼。 |
9 | void setTime(long time) |
設定時間指定的時間和日期,表示從1970年1月1日午夜開始的經過時間(以毫秒為單位)。 |
10 | String toString( ) |
將呼叫Date 物件轉換為字串並返回結果。 |
這是一種在Java中獲取當前日期和時間的簡單方法。可以使用Date
物件toString()
方法來列印當前日期和時間,如下所示 -
import java.util.Date;
public class Test {
public static void main(String args[]) {
// 範例化Date物件
Date date = new Date();
// display time and date using toString()
System.out.println(date.toString());
}
}
執行上面範例程式碼,得到以下結果:
Fri Mar 15 13:00:37 CST 2020
SimpleDateFormat
是一個具體的類,用於以區域設定的方式格式化和解析日期。 SimpleDateFormat
用於從為日期時間格式選擇使用者定義的模式。
範例
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String args[]) {
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd (E)'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
SimpleDateFormat ft2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println("Current Datetime: " + ft2.format(dNow));
}
}
執行上面範例程式碼,得到以下結果:
Current Date: 2019.03.15 (星期五)at 01:04:52 下午 CST
Current Datetime: 2019-03-15 01:04:52
DateFormat格式程式碼
要指定時間格式,請使用時間模式字串。 在此模式中,所有ASCII字母都保留為模式字母,其定義如下 -
編號 | 字元 | 描述 | 示全殲 |
---|---|---|---|
1 | G | 時代指示符 | AD |
2 | y | 四位數的年份值 | 2019 |
3 | M | 月份 | July or 07 |
4 | d | 日 | 10 |
5 | h | 小時 A.M./P.M. (1~12) | 12 |
6 | H | 24小時製的小時表示 (0~23) | 22 |
7 | m | 分鐘 | 30 |
8 | s | 秒鐘 | 55 |
9 | S | 毫秒 | 234 |
10 | E | 星期幾 | Tuesday |
11 | D | 一年中的第幾天 | 360 |
12 | F | 一個月中的某一天 | 2 (second Wed. in July) |
13 | w | 一年中的第幾個星期 | 40 |
14 | W | 一月中的第幾個星期 | 1 |
15 | a | A.M./P.M. 標記 | PM |
16 | k | 小時 (1~24) | 24 |
17 | K | 小時 A.M./P.M. (0~11) | 10 |
18 | z | 時區 | Eastern Standard Time |
19 | ‘ | 跳脫文字 | Delimiter |
20 | ` | 單引號 | ` |
使用printf
方法來完成日期和時間格式化。使用雙字母格式,以t
開頭並以表格的一個字母結尾,如下面的程式碼所示。
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
String str = String.format("Current Date/Time : %tc", date);
System.out.printf(str);
}
}
執行上面範例程式碼,得到以下結果:
Current Date/Time : 星期五 三月 15 13:18:24 CST 2019
如果多次提供日期來格式化每個部分,那多少會有點愚蠢。 格式字串可以指示要格式化的引數的索引。
索引必須緊跟%
,並且必須以$
結尾。
範例
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
執行上面範例程式碼,得到以下結果:
Due date: 三月 16, 2019
或者,可以使用<
標誌。 它表示再次使用與前面的格式規範相同的引數。
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display formatted date
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
執行上面範例程式碼,得到以下結果:
Due date: 三月 16, 2019
範例
編號 | 字元 | 描述 | 範例 |
---|---|---|---|
1 | c | 完全日期和時間 | Mon May 04 09:51:52 CDT 2019 |
2 | F | ISO 8601 date | 2004-02-09 |
3 | D | U.S. formatted date (month/day/year) | 02/09/2004 |
4 | T | 24小時時間 | 18:05:19 |
5 | r | 12小時時間 | 06:05:19 pm |
6 | R | 24小時時間, 無秒鐘。 | 18:05 |
7 | Y | 四位數年份(前導零) | 2019 |
8 | y | 年份的最後兩位數(帶前導零) | 19 |
9 | C | 年份的前兩位數(帶前導零) | 20 |
10 | B | 月份全名稱 | February |
11 | b | 縮寫的月份名稱 | Feb |
12 | m | 兩位數月份(帶前導零) | 02 |
13 | d | 兩位數的日期(帶前導零) | 03 |
14 | e | 兩位數的日期(沒有前導零) | 9 |
15 | A | 完整的工作日名稱 | Monday |
16 | a | 縮寫的工作日名稱 | Mon |
17 | j | 一年中的三位數日(帶前導零) | 069 |
18 | H | 兩位數小時(前導零),介於00和23之間 | 18 |
19 | k | 兩位數小時(不帶前導零),介於0和23之間 | 18 |
20 | I | 兩位數小時(前導零),介於01和12之間 | 06 |
21 | l | 兩位數小時(不帶前導零),介於1和12之間 | 6 |
22 | M | 兩位數分鐘(帶前導零) | 05 |
23 | S | 兩位數秒(帶前導零) | 19 |
24 | L | 三位數毫秒(帶前導零) | 047 |
25 | N | 九位納秒(帶前導零) | 047000000 |
26 | P | 大寫上午或下午標記 | PM |
27 | p | 小寫上午或下午標記 | pm |
28 | z | GMT的RFC 822數位偏移量 | -0800 |
29 | Z | 時區 | PST |
30 | s | 自1970-01-01 00:00:00 GMT以來的秒數 | 1078884319 |
31 | Q | 自1970-01-01 00:00:00 GMT以來的毫秒數 | 1078884319047 |
還有其他與日期和時間相關的有用類。 有關更多詳細資訊,請參閱Java標準文件。
SimpleDateFormat
類有一些額外的方法,特別是parse()
,它用於根據儲存在給定的SimpleDateFormat
物件中的格式來解析字串。
範例
import java.util.*;
import java.text.*;
public class Test {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
String input = args.length == 0 ? "2019-11-11" : args[0];
System.out.print(input + " 解析為:");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
執行上面範例程式碼,得到以下結果:
2019-11-11 解析為:Mon Nov 11 00:00:00 CST 2019
可以在計算機生命週期的任何時間段內睡眠。 例如,以下程式將睡眠3
秒鐘 -
import java.util.*;
import java.text.*;
public class Test {
public static void main(String args[]) {
try {
System.out.println(new Date());
Thread.sleep(5 * 60 * 10);
System.out.println(new Date());
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
執行上面範例程式碼,得到以下結果:
Sat Mar 16 15:51:43 CST 2019
Sat Mar 16 15:51:46 CST 2019
有時,可能需要以毫秒為單位測量時間點。 重寫上面的例子 -
import java.util.*;
import java.text.*;
public class Test {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis();
System.out.println(new Date());
Thread.sleep(5 * 60 * 10);
System.out.println(new Date());
long end = System.currentTimeMillis();
long diff = end - start;
System.out.println("時間差為: " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
執行上面範例程式碼,得到以下結果:
Sat Mar 16 15:53:25 CST 2019
Sat Mar 16 15:53:28 CST 2019
Difference is : 3021