java.util包下的Calendar和Date類來處理有關於時間操作.
java.util.Date
Date 類提供兩個構造函數來實例化 Date 對象。
第一個構造函數使用當前日期和時間來初始化對象。
Date()
第二個構造函數接收一個參數,該參數是從1970年1月1日起的毫秒數。
Date(long millisec)
當調用無參構造方法時即爲獲取當前時間.
對於Date類常見的操作有時間的比較,按特定格式格式化Date,將String類型時間字符串轉換爲Date類型
1.日期比較
Java使用以下三種方法來比較兩個日期:
- 使用 getTime() 方法獲取兩個日期(自1970年1月1日經歷的毫秒數值),然後比較這兩個值.
- 使用方法 before(Date date),after(Date date) 和 equals(Object object).
- 使用 compareTo() 方法.
方法定義如下:
boolean after(Date date)
若當調用此方法的Date對象在指定日期之後返回true,否則返回false
boolean before(Date date)
如當調用此方法的Date對象在指定日期之前返回true,否則反水false
int compareTo(Date anotherDate)
比較調用當前方法的Date對象和指定的anotherDate對象.相等返回0,調用對象在指定對象之前返回負數,反之返回正數
2.Date轉換成指定格式的字符串
SimpleDateFormat 是一個以語言環境敏感的方式來格式化和分析日期的類。SimpleDateFormat 允許你選擇任何用戶自定義日期時間格式來運行
SimpleDateFormat的構造方法如下:
SimpleDateFormat(String pattern)
時間模式字符串常見的如下:
字母 | 描述 | 示例 |
---|
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 |
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat1.format(new Date());
System.out.println(format);//2018-06-25 17:12:22
3.時間類型字符串轉換成Date對象
SimpleDateFormat 類有一些附加的方法,特別是parse(),它試圖按照給定的SimpleDateFormat 對象的格式化存儲來解析字符串。例如:
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
String input = "2018-06-25 17:12:22";
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
java.util.calendar
創建一個代表系統當前日期的Calendar對象
Calendar c = Calendar.getInstance();//默認是當前日期
創建一個指定日期的Calendar對象
使用Calendar類代表特定的時間,需要首先創建一個Calendar的對象,然後再設定該對象中的年月日參數來完成。
//創建一個代表2009年6月12日的Calendar對象
Calendar c1 = Calendar.getInstance();
//c1.set(int year,int month,int day)
c1.set(2009, 6 - 1, 12);//month從0開始
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 | 星期幾 |
如果只設定某個字段,例如日期的值,則可以使用如下set方法:
public void set(int field,int value)
實例:
calendar.set(Calendar.YEAR, 2017);
calendar.set(Calendar.MONDAY, 2);
calendar.set(Calendar.DATE, 30);
calendar.add(Calendar.MONDAY, 5);
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);
Calendar與Date對象的轉換
Calendar-->Date
Calendar calendar=Calendar.getInstance();
Date time = calendar.getTime();
Date-->CalendarDate date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
補充:Calendar類實現了公曆日曆,GregorianCalendar是Calendar類的一個具體實現。
Calendar 的getInstance()方法返回一個默認用當前的語言環境和時區初始化的GregorianCalendar對象
在判斷是否爲閏年是可以使用isLeapYear(int year)
boolean isLeapYear(int year)
確定給定的年份是否爲閏年。
實例:
public static void main(String[] args) {
//在具有默認語言環境的默認時區內使用當前時間構造一個默認的 GregorianCalendar。
GregorianCalendar gregorianCalendar = new GregorianCalendar();
int year = gregorianCalendar.get(Calendar.YEAR);
if (gregorianCalendar.isLeapYear(year)) {
System.out.println("今年是閏年!");
} else {
System.out.println("今年不是閏年!");
}
}
Java 8通過發佈新的Date-Time API (JSR 310)來進一步加強對日期與時間的處理。
在舊版的 Java 中,日期時間 API 存在諸多問題,其中有:
非線程安全 − java.util.Date 是非線程安全的,所有的日期類都是可變的,這是Java日期類最大的問題之一。
設計很差 − Java的日期/時間類的定義並不一致,在java.util和java.sql的包中都有日期類,此外用於格式化和解析的類在java.text包中定義。java.util.Date同時包含日期和時間,而java.sql.Date僅包含日期,將其納入java.sql包並不合理。另外這兩個類都有相同的名字,這本身就是一個非常糟糕的設計。
時區處理麻煩 − 日期類並不提供國際化,沒有時區支持,因此Java引入了java.util.Calendar和java.util.TimeZone類,但他們同樣存在上述所有的問題。
Java 8 在 java.time 包下提供了很多新的 API。以下爲兩個比較重要的 API:
Local(本地) − 簡化了日期時間的處理,沒有時區的問題。
Zoned(時區) − 通過制定的時區處理日期時間。
新的java.time包涵蓋了所有處理日期,時間,日期/時間,時區,時刻(instants),過程(during)與時鐘(clock)的操作。
實例:
LocalDateTime now = LocalDateTime.now();
System.out.println("當期dateTime爲:" + now);
LocalDate localDate = now.toLocalDate();
System.out.println("當前日期爲 :" + localDate);
LocalTime localTime = now.toLocalTime();
System.out.println(localTime);
具體新特性參考java8 API.
----------------------分隔符
以上僅作個人學習,如有侵權請聯繫刪除.謝謝
結尾語:
有志者、事竟成,破釜沉舟,百二秦關終屬楚;
苦心人、天不負,臥薪嚐膽,三千越甲可吞吳。