java.util.Date類
java.util提供了Date類來封裝日期和時間。實例化Date類的兩個構造函數,
Date();--當前時間
Date(long millisec);--距離格林威治時間1970年1月1日millisec毫秒的時間
使用SimpleDateFormat格式化日期
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date now = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(now));
//Current Date: 火 2016.11.01 at 01:37:56 午後 CST
} }
簡單的DateFormat格式化編碼
| 字母 | 描述 | 示例 |
|---|---|---|
| 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 |
| " | 單引號 | ` |
使用printf格式化日期
printf方法可以很輕松地格式化時間和日期。使用兩個字母格式,它以t開頭並且以下面轉換字符表格中的一個字母結尾。例如:
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化 Date 對象
Date date = new Date();
// 使用toString()顯示日期和時間
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
//Due date: 11月 01, 2016
}
}
日期和時間轉換字符
| 字符 | 描述 | 例子 |
| c | 完整的日期和時間 | Mon May 04 09:51:52 CDT 2009 |
| F | ISO 8601 格式日期 | 2004-02-09 |
| D | U.S. 格式日期 (月/日/年) | 02/09/2004 |
| T | 24小時時間 | 18:05:19 |
| r | 12小時時間 | 06:05:19 pm |
| R | 24小時時間,不包含秒 | 18:05 |
| Y | 4位年份(包含前導0) | 2004 |
| y | 年份后2位(包含前導0) | 04 |
| C | 年份前2位(包含前導0) | 20 |
| B | 月份全稱 | February |
| b | 月份簡稱 | Feb |
| n | 2位月份(包含前導0) | 02 |
| d | 2位日子(包含前導0) | 03 |
| e | 2位日子(不包含前導0) | 9 |
| A | 星期全稱 | Monday |
| a | 星期簡稱 | Mon |
| j | 3位年份(包含前導0) | 069 |
| H | 2位小時(包含前導0), 00 到 23 | 18 |
| k | 2位小時(不包含前導0), 0 到 23 | 18 |
| I | 2位小時(包含前導0), 01 到 12 | 06 |
| l | 2位小時(不包含前導0), 1 到 12 | 6 |
| M | 2位分鍾(包含前導0) | 05 |
| S | 2位秒數(包含前導0) | 19 |
| L | 3位毫秒(包含前導0) | 047 |
| N | 9位納秒(包含前導0) | 047000000 |
| P | 大寫上下午標志 | PM |
| p | 小寫上下午標志 | pm |
| z | 從GMT的RFC 822數字偏移 | -0800 |
| Z | 時區 | PST |
| s | 自 1970-01-01 00:00:00 GMT的秒數 | 1078884319 |
| Q | 自 1970-01-01 00:00:00 GMT的毫妙 | 1078884319047 |
解析字符串為時間
SimpleDateFormat亦可將符合format的字符串裝換成Date對象
package per.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDataFormat {
public static void main(String[] args){
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy.MM.dd");
String str = "2016.11.01";
Date date2=new Date();
try {
date2 = df.parse(str);
System.out.println(date2);
}catch (ParseException e){
System.out.println("Unparseable using"+df);
}
}//Tue Nov 01 00:00:00 CST 2016
}
測量時間
結束時間-開始時間=用時。System.currentTimeMillis();--取得系統當前時間秒數。
import java.util.*;
public class TestDataFormat {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + "\n");
Thread.sleep(6000);//讓當前線程休眠(阻塞)6秒,讓出CPU的使用,給別的線程利用cpu的機會
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Calendar類
創建一個Canlendar對象---
Calendar c = Calendar.getInstance();//默認是當前日期
創建一個指定日期的Canlendar對象
Calendar c1= new Calendar.getIntance();
c1.set(2016,11,01);//20161101
Calendar類對象字段類型
Calendar類中用一下這些常量表示不同的意義,jdk內的很多類其實都是采用的這種思想
| 常量 | 描述 |
|---|---|
| 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 | 星期幾 |
Calendar類對象信息的設置
Set設置
如:
Calendar c1 = Calendar.getInstance();
調用:
public final void set(int year,int month,int date)
c1.set(2009, 6 - 1, 12);//把Calendar對象c1的年月日分別設這為:2009、6、12
利用字段類型設置
如果只設定某個字段,例如日期的值,則可以使用如下set方法:
public void set(int field,int value)
把 c1對象代表的日期設置為10號,其它所有的數值會被重新計算
c1.set(Calendar.DATE,10);
把c1對象代表的年份設置為2008年,其他的所有數值會被重新計算
c1.set(Calendar.YEAR,2008);
其他字段屬性set的意義以此類推
Add設置
Calendar c1 = Calendar.getInstance();
把c1對象的日期加上10,也就是c1也就表示為10天后的日期,其它所有的數值會被重新計算
c1.add(Calendar.DATE, 10);
把c1對象的日期減去10,也就是c1也就表示為10天前的日期,其它所有的數值會被重新計算
<pre>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類的一個具體實現。
Calendar 的getInstance()方法返回一個默認用當前的語言環境和時區初始化的GregorianCalendar對象。GregorianCalendar定義了兩個字段:AD和BC。這些代表公歷定義的兩個時代。
下面列出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) 用給定的日期設置Calendar的當前時間。 |
| 25 | void setTimeInMillis(long millis) 用給定的long型毫秒數設置Calendar的當前時間。 |
| 26 | void setTimeZone(TimeZone value) 用給定時區值設置當前時區。 |
| 27 | String toString() 返回代表日歷的字符串。 |
FeedBack:



