閱讀884 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java基礎入門(一):Java裏麵的時間

這是一篇非常基礎的Java技術文章,簡單的說就是一個知識點,是自己在寫業務代碼時的一點總結,大神請繞行。

在 java 裏麵 表示 時間 ,一種是 java.util.Date 類,一種是 long 型的Unix時間戳,還有一種是String的字符串,當然前兩種時間表示方法是時間定義的,可以對其進行操作計算得到一定的時間含義的,String字符串大多是前端顯示之用,那當這三種形式共存時,必不可少就需要類型之間的轉換及其對時間上的計算操作,這是在做一些業務功能上經常會用到的,現在總結一下通常所用的方法,以來簡化後麵再用到此類時能節省一定的時間而不需每次都要找度娘。

小典故:Unix時間戳,表示 格林威治時間1970年01月01日00時00分00秒起至現在的總秒數,如果係統為32位係統,則會因為位數不夠的情況下,在格林威治時間2038年01月19日03時14分07秒發生溢出,導致係統癱瘓,但目前看來應該 大部分 係統都是 64位的吧,算了算貌似有生之年可以到那一天,不曉得會發生什麼事情不。:-D


類型轉換

大多是 String 與 Date 之間的轉換 ,有一套yyyy-MM-dd HH:mm:ss的表示想必大家應該都知道
在這裏和大家推薦一下Apache的 DateUtils , 這個方法 歸納了一些日期上的操作,讓你用一句兩句話便搞定時間上的操作,真乃神器也,有空看一下它的源碼,你就會知道其實還是那麼幾個類,通常比較好的業務代碼,會自己 再封裝一個DateUtil ,去歸納總結一下在本業務中需要用到的一些常用的日期操作和符合本係統的日期表達方式。

String 轉Date

String[]patters=newString[]{"yyyy-MM-ddHH:mm:ss"};
Date date = DateUtils.parseDate(time,patters)

Date 轉String

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = format.format(date);

時間戳轉Date

long timeStamp = 12345678L;
Date time = new Date(timeStamp);

時間戳要說一句,一般從Date 裏麵的 getTime()方法獲得的是ms級別的10位數字,而業務代碼裏麵一般要用到s級的,因此不要忘記除以1000之後再使用。再推薦一個日期和時間戳轉換的網站,供業務功能調試及測試使用,當然你也可以自己寫一個~

Date轉Calendar

Date date = new Date();
Calendar c = DateUtils.toCalendar(date); // 注意try catch Exception

時間操作

Apache 的 DateUtils 提示已經提供了大部分對 日期 增減的 方法,看裏麵的方法就會知道:

dateUtils.png

但如果你對時間有特別的需求,比如說需要取某個時間的 小時 數,這個時候 就需要用到 Calendar ,因此一般的操作是 將Date 轉換成Calendar ,再利用Caleadar對時間進行相應的操作,貼了一下相關代碼,給個參考

Date date = new Date();
Calendar payTimeCal = DateUtils.toCalendar(date);
int payHour = payTimeCal.get(Calendar.HOUR_OF_DAY);  // 取 小時

Calendar startTimeCal = DateUtils.toCalendar(date);
startTime.set(payTimeCal.get(Calendar.YEAR),payTimeCal.get(Calendar.MONTH),payTimeCal.get(Calendar.DATE));  // 給startTime 設置和 PayTimeCal 一樣的 年月日    

更多Calendar類的用法等你挖掘,一般看看相應源碼就能滿足 你當時業務時間功能上的需求。
這又印證了一句古話,See the source code, see the world (嗯,是我說的)。

最後更新:2017-04-19 11:30:40

  上一篇:go Pure PostgreSQL實現推薦係統
  下一篇:go RDS SQL Server死鎖(Deadlock)係列之一使用DBCC捕獲死鎖