java 计算周_java – Joda时间周计算推理
下面的代碼演示了星期計算的有問題的joda-time實現.這種行為不是錯誤,而是設計決策
Joda-Time uses the ISO standard Monday to Sunday week.(也許它應該是一個錯誤?)
給定一個我需要計算周數的日期,這個計算必須是i18n.含義我必須根據用戶的區域設置考慮正確的周編號.
下面的演示代碼顯示了Joda-Time的錯誤計算和JDK的正確計算,在我們嘗試堅持使用Joda-Time的應用程序中,這是日期操作的優秀解決方案.那么,我應該混合兩個時間計算庫嗎?我顯然不愿意,這甚至是一件安全的事情,還是我會進入角落案件(有日期,日歷的經驗我知道這對Java來說是一個痛苦的問題).
底線:對于上述要求,建議的最佳做法是什么?
問題演示代碼
public class JodaTest {
static DateTimeFormatter formatter = DateTimeFormat.forPattern("ww yyyy");
static SimpleDateFormat jdkFormatter = new SimpleDateFormat("ww yyyy");
public static void main(String[] args) {
DateTime time = new DateTime(/*year*/2009, /*monthOfYear*/12, /*dayOfMonth*/6, /*hourOfDay*/23, /*minuteOfHour*/0, /*secondOfMinute*/0, /*millisOfSecond*/0);
StringBuilder buffer = new StringBuilder()
.append("Testing date ").append(time.toString()).append("\n")
.append("Joda-Time timezone is ").append(DateTimeZone.getDefault()).append(" yet joda wrongly thinks week is ").append(formatter.print(time)).append("\n")
.append("JDK timezone is ").append(TimeZone.getDefault().getID()).append(" yet jdk rightfully thinks week is ").append(jdkFormatter.format(time.toDate())).append(" (jdk got it right ?!?!)");
System.out.println(buffer.toString());
}
}
輸出:
Testing date 2009-12-06T23:00:00.000+02:00
Joda-Time timezone is Asia/Jerusalem yet joda wrongly thinks week is 49 2009
JDK time zone is Asia/Jerusalem yet jdk rightfully thinks week is 50 2009 (jdk got it right ?!?!)
最佳答案 最好的解決方案是編寫DateTimeField的實現,它包裝邏輯以根據語言環境提取所需的值.在內部,您可能仍然依賴于JDK數據.目的是將所有JDK代碼包裝在一個可重用的類中.然后你像這樣使用它:
int value = dateTime.get(new LocaleAwareWeekField("en_GB"));
總結
以上是生活随笔為你收集整理的java 计算周_java – Joda时间周计算推理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Amazon Elasticache
- 下一篇: 找规律万能公式_初中规律题的万能公式