Java基礎——常用類之日期時間類
如果有機會,請嘗試Java8中全新的時間日期API!(參見Java8新特性隨筆)
如果還是使用Java7及之前的版本,那麼你可以嘗試一些工具類(參考使用工具類相關的Hutool-DateUtil)
如果又不能升級JDK,又無法引入第三方依賴庫,那麼你可以需要了解以下的時間日期相關的API(無奈之舉)
一、常用日期類
二、System類
我們比較常用的時間相關的方法:
我們這裡特別注意一下它的定義:返回的是與1970.1.1的時間差(單位:毫秒),由這個定義我們也容易知道它一般不單獨使用(意義不大),
最常見的用途就是:計算時間差:
public static void main(String[] args) { long start = System.currentTimeMillis(); for (int i = 0; i<100; i++) { if (i % 2 == 0) { System.out.println("左青龍"); } else { System.out.println("右白虎"); } }long end = System.currentTimeMillis(); System.out.println("用時(ms):"+ (end - start)); }
三、Date類
1.構造方法(過時方法不再贅述)
例項化Date:(已重寫toString())
public static void main(String[] args) { // 通過構造器構建Date例項 Date date1 = new Date(); System.out.println(date1);// Thu Sep 14 20:32:16 CST 2017 }
//使用long型有參構造請帶上字尾L(new Date(13807966980L))
2.常用方法(可以看到API中很多方法都已經過時)
getTime()——返回對應的毫秒數
public static void main(String[] args) { // 通過構造器構建Date例項 Date date1 = new Date(); System.out.println(date1.getTime());// 1505392872857 }
四、SimpleDateFormat
由於Date類不利於國際化,已經由java.text包(實際上與格式化和解析的類基本都在此包下)下的SimpleDateFormat替代,
作為一個與語言環境有關的方式來格式化和解析日期的具體類
1.構造方法:
也可以解析例如Sep等的英文縮寫月份!
2.常用方法:(用於解析與格式化)
format(Date date)——格式化,將日期格式化為字串
pattern格式詳解可以參見API(常用:yyyy-MM-dd HH:mm:ss)
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 格式化 String s = sdf.format(new Date()); System.out.println(s);// 2017-09-14 }
parse(String str)——解析,將字串解析為日期
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 解析 try { Date date = sdf.parse("2008-8-8"); System.out.println(date);// Fri Aug 08 00:00:00 CST 2008 } catch (ParseException e) { e.printStackTrace(); } }
五、Calendar
主要用於完成欄位之間的相互操作的一個抽象基類
1.構造方法(由於是抽象類,無法直接new)
2.常用方法
get(int field)——獲取欄位的方法
其中涉及的屬性可以參見API的屬性列表,其中的注意點:
MONTH月份從0開始,也就是1-12月對應 0-11,在Calender中有常量,如Calender.MAY等常量來表示!
DAY_OF_WEEK從1開始,也就是週日到週六對應 1-7
例項:
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c; // 解析 try { Date date = sdf.parse("2017-9-14 21:42:18"); // 使用Date作為引數初始化日曆類 c = Calendar.getInstance(); c.setTime(date); // 驗證日曆設定的時間是否生效 String s = sdf.format(c.getTime()); System.out.println(s); /*通過日曆對日期進行欄位的操作,獲取年月日,操作年月日等*/ // 顯示年份 int year = c.get(Calendar.YEAR); System.out.println("年份:"+year); // 顯示月份(從0開始) int month = c.get(Calendar.MONTH); System.out.println("月份:"+month); // 周幾(從週日(對應1)開始) int weekDay = c.get(Calendar.DAY_OF_WEEK); System.out.println("周幾:"+weekDay); // 本月第N天 int day = c.get(Calendar.DAY_OF_MONTH); System.out.println("本月第幾天:"+day); /*利用日曆操作日期*/ // 2小時後 c.add(Calendar.HOUR_OF_DAY, 2); int hour = c.get(Calendar.HOUR_OF_DAY); System.out.println("2小時後:"+hour); // 15分鐘前 c.add(Calendar.MINUTE, -15); int min = c.get(Calendar.MINUTE); System.out.println("15分鐘前:"+min); // 重置為當前時間 c.setTime(new Date()); Date now = c.getTime(); String s1 = sdf.format(now); System.out.println("當前時間:"+s1); } catch (ParseException e) { e.printStackTrace(); }
結果: