1. 程式人生 > >Java——日期時間

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