Java——日期時間
一. Date 類
java.util 包提供了 Date 類來封裝當前的日期和時間。 Date 類提供兩個建構函式來例項化 Date 物件。
第一個建構函式使用當前日期和時間來初始化物件。
Date( )
第二個建構函式接收一個引數,該引數是從1970年1月1日起的毫秒數。
Date(long millisec)
import java.util.Date; public class Test1 { public static void main(String[] args) { Date date1 = new Date(); System.out.println(date1); // Wed Oct 24 19:32:38 CST 2018 long time = System.currentTimeMillis(); Date date2 = new Date(time); System.out.println(date2); // Wed Oct 24 19:32:38 CST 2018 } }
1. long getTime( ) ——日期轉毫秒值
返回自 1970 年 1 月 1 日 00:00:00 GMT 以來此 Date 物件表示的毫秒數。
2. void setTime(long time)——毫秒值轉日期
用自1970年1月1日00:00:00 GMT以後time毫秒數設定時間和日期。
import java.util.Date; public class Test1 { public static void main(String[] args) { Date date1 = new Date(); System.out.println(date1.getTime()); // 1540381384198 Date date2 = new Date(); long time = System.currentTimeMillis(); date2.setTime(time); System.err.println(date2); // Wed Oct 24 19:43:04 CST 2018 } }
3.boolean after(Date date)
若當呼叫此方法的Date物件在指定日期之後返回true,否則返回false。
4. boolean before(Date date)
若當呼叫此方法的Date物件在指定日期之前返回true,否則返回false。
import java.util.Date; public class Test1 { public static void main(String[] args) { Date date1 = new Date(10000); Date date2 = new Date(20000); System.out.println(date1.before(date2)); // true System.out.println(date1.after(date2)); // false } }
5. int compareTo(Date date)
比較當呼叫此方法的 Date 物件和指定日期。兩者相等時候返回0。呼叫物件在指定日期之前則返回負數。呼叫物件在指定日期之後則返回正數。
import java.util.Date;
public class Test1 {
public static void main(String[] args) {
Date date1 = new Date(10000);
Date date2 = new Date(20000);
System.out.println(date1.compareTo(date2)); // -1
System.out.println(date2.compareTo(date1)); // 1
System.out.println(date1.compareTo(date1)); // 0
}
}
6. String toString( )
把此 Date 物件轉換為以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一週中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
import java.util.Date;
public class Test1 {
public static void main(String[] args) {
Date date1 = new Date();
System.out.println(date1.toString()); // Wed Oct 24 19:52:52 CST 2018
}
}
二. Calendar類
建立一個代表系統當前日期的Calendar物件:
Calendar c = Calendar.getInstance();//預設是當前日期
建立一個指定日期的Calendar物件:
使用Calendar類代表特定的時間,需要首先建立一個Calendar的物件,然後再設定該物件中的年月日引數來完成。
//建立一個代表2009年6月12日的Calendar物件
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
1. Calendar類物件欄位型別
public class Test1 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c.toString());
/**
* 執行結果:
* java.util.GregorianCalendar[time=1540382975562,areFieldsSet=true,
* areAllFieldsSet=true,lenient=true,
* zone=sun.util.calendar.ZoneInfo[id="Asia/Taipei",offset=28800000,
* dstSavings=0,useDaylight=false,transitions=42,lastRule=null],
* firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,
* MONTH=9,WEEK_OF_YEAR=43,WEEK_OF_MONTH=4,DAY_OF_MONTH=24,
* DAY_OF_YEAR=297,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=4,
* AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=9,SECOND=35,
* MILLISECOND=562,ZONE_OFFSET=28800000,DST_OFFSET=0]
*/
Calendar c1 = Calendar.getInstance();
c1.set(2018,9,24);
}
}
常量 | 描述 |
---|---|
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 | 星期幾 |
2. Calendar 類物件資訊的設定
序號 | 方法和說明 |
1 | void add(int field, int amount) 根據日曆規則,將指定的(有符號的)時間量新增到給定的日曆欄位中。 |
2 | boolean equals(Object obj) 比較此 GregorianCalendar 與指定的 Object。 |
3 | int get(int field) 獲取指定欄位的時間值 |
4 | Date getTime() 獲取日曆當前時間。 |
5 | TimeZone getTimeZone() 獲取時區。 |
6 | boolean isLeapYear(int year) 確定給定的年份是否為閏年。 |
7 | void set(int field, int value) 用給定的值設定時間欄位。 |
8 | void set(int year, int month, int date) 設定年、月、日的值。 |
9 | void set(int year, int month, int date, int hour, int minute) 設定年、月、日、小時、分鐘的值。 |
10 | void set(int year, int month, int date, int hour, int minute, int second) 設定年、月、日、小時、分鐘、秒的值。 |
11 | void setTime(Date date) 用給定的日期設定Calendar的當前時間。 |
12 | void setTimeZone(TimeZone value) 用給定時區值設定當前時區。 |
13 | String toString() 返回代表日曆的字串。 |
a. Set設定
public final void set(int year,int month,int date)
或
public void set(int field,int value)
import java.util.Calendar;
public class Test1 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.set(2018, 10-1,24); // 把Calendar物件c的年月日分別設這為:2018、10、24
c.set(Calendar.DATE,10); // 把 c 物件代表的日期設定為10號
c.set(Calendar.YEAR, 8012); // 把 c物件代表的年份設定為8012年
}
}
b. Add設定
add(int field, int amount)
根據日曆的規則,為給定的日曆欄位新增或減去指定的時間量。
import java.util.Calendar;
public class Test1 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 3); // 把c物件的日期加上3,也就表示3天后的日期
c.add(Calendar.DATE, -3); // 把c物件的日期加上-3,也就表示3天前的日期
}
}
3. Calendar類物件資訊的獲得
import java.util.Calendar;
public class Test {
public static void main( String args[]){
Calendar c1 = Calendar.getInstance();
// 獲得年份
int year = c1.get(Calendar.YEAR);
// 獲得月份
int month = c1.get(Calendar.MONTH)+1;
// 獲得日期
int date = c1.get(Calendar.DATE);
System.out.println("今天是:"+year+"年"+month+"月"+date+"日");
// 今天是:2018年10月25日
}
}
三. 格式化日期時間
1. 日期和時間的格式化編碼
時間模式字串用來指定時間格式。在此模式中,所有的 ASCII 字母被保留為模式字母,定義如下:
字母 | 描述 | 示例 |
---|---|---|
G | 紀元標記 | AD |
y | 四位年份 | 2001 |
M | 月份 | July or 07 |
d | 一個月的日期 | 10 |
h | A.M./P.M. (1~12)格式小時 | 12 |
H | 一天中的小時 (0~23) | 22 |
m | 分鐘數 | 30 |
s | 秒數 | 55 |
S | 毫秒數 | 234 |
E | 星期幾 | Tuesday |
D | 一年中的日子 | 360 |
F | 一個月中第幾周的周幾 | 2 (second Wed. in July) |
w | 一年中第幾周 | 40 |
W | 一個月中第幾周 | 1 |
a | A.M./P.M. 標記 | PM |
k | 一天中的小時(1~24) | 24 |
K | A.M./P.M. (0~11)格式小時 | 10 |
z | 時區 | Eastern Standard Time |
' | 文字定界符 | Delimiter |
" | 單引號 | ` |
2. 使用 SimpleDateFormat 格式化日期
SimpleDateFormat 是一個以語言環境敏感的方式來格式化和分析日期的類。SimpleDateFormat 允許你選擇任何使用者自定義日期時間格式來執行。
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main( String args[]){
Date date = new Date();
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("當前時間為:"+ft.format(date));
// 當前時間為:2018-10-25 17:17:17
}
}
3. 使用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.Calendar;
public class Test {
public static void main( String args[]){
Calendar c = Calendar.getInstance();
// %t 時間格式
// %n 換行
// c 的使用
System.out.printf("%tc%n",c);
// F 的使用
System.out.printf("%tF%n",c);
// D 的使用
System.out.printf("%tD%n",c);
// r 的使用
System.out.printf("%tr%n",c);
// T 的使用
System.out.printf("%tT%n",c);
// R 的使用
System.out.printf("%tR%n",c);
}
}
執行結果:
星期四 十月 25 18:02:02 CST 2018
2018-10-25
10/25/18
06:02:02 下午
18:02:02
18:02
四. java 休眠
sleep()使當前執行緒進入停滯狀態(阻塞當前執行緒),讓出CPU的使用、目的是不讓當前執行緒獨自霸佔該程序所獲的CPU資源,以留一定時間給其他執行緒執行的機會。
import java.util.Date;
public class Test {
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!");
}
}
}
執行結果:
Thu Oct 25 19:18:05 CST 2018
Thu Oct 25 19:18:08 CST 2018