Android 日期的八卦
2 min readNov 24, 2016
我們知道在 Java8 以前的日期處理很麻煩,所以誕生了很多第三方函式庫,像是知名的 Joda-Time 。
在 Android 也可以使用 Joda-Time,不過 Dan Lew 在 2013 年中發現 Joda-Time 在 Android 十分吃資源的問題,主要在於 Android 從 jar 動態載入時區資料快取導致,這在 Jackson 載入版本資訊也有類似的狀況,所以轉換成 android assets 格式,讓 Android AssetsManager 做管理,不需要整個資料都要快取來減輕:joda-time-android 。
而 2014 年釋出正式版本的 JSR310 向下相容獨立函式庫: ThreeTenBP,也有類似的問題 Jake Wharton 也仿造了 Dan Lew 的作法,另闢了一個 ThreeTenABP (星星比 ThreeTenBP 多,不知道怎麼回事)。
JSR310 是 Java8 採用的日期處理規格,目前是最新完整的處理類,主體是改良 Joda-Time ,為了統一標準化,在 Android 推薦使用 ThreeTen 向下相容版本 ThreeTenABP。
而且從 Joda-Time 轉也十分的容易,因為界面雷同。
常見用法
Before:
Calendar calendar = calendar.getInstance(Locale.getDefault());
calendar.setTime(new Date());
calendar.add(Calendar.DATE, -1);Date tomorrow = calendar.getTime();calendar.setTime(new Date());
calendar.add(Calendar.DATE, 1);
Date yesterday = calendar.getTime();
After:
val tomorrow = LocalDateTime.now().plusDays(1L).toDate()
val yesterday = LocalDateTime.now().minusDays(1L).toDate()
其他
如果在 Android App 有顯示日期文字的需求可善用 android.text.format.DateUtils
Kotlin
- yongjhih/kxdate (fork for ThreeTenAbp)