本文介紹了在Java中使用時區獲取特定日期的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我對Java中的日期和時間庫有點著迷。基本上,我需要的是獲取兩個字符串日期,第一個對應于澳大利亞時間的前一天(考慮到夏令時),具有特定的小時(將作為參數)和以下日期格式:"yyyy-MM-dd'T'HH:mm:ss.SSS zzz"
。
考慮我將收到如下形式的時間:"180000"
。因此,如果今天是澳大利亞的11月17日,我將需要獲取以下字符串:
"2017-11-16T18:00:00.000 AEDT"
我需要的第二個字符串日期與今天在au time中的日期相同:
"2017-11-17T18:00:00.000 AEDT"
我無法使用JDK 8,我必須使用JDK 7。
我嘗試了不同的方法,但我沒有得到我需要的。任何建議都很棒。
推薦答案
我看到您的評論,您不能使用Java 8,您必須使用JDK 7。同時,特別是對于像您這樣不是很普通的操作,java.time
,2014年Java 8推出的現代Java日期和時間API使用起來要好得多。幸運的是,現代的API也已經在ThreeTen Backport(即JSR-310的ThreeTen,API第一次被描述的地方)中被移植到了Java 6和7。因此,我鼓勵您獲得后端口并開始編碼:
ZoneId australianTime = ZoneId.of("Australia/Sydney");
DateTimeFormatter receivedTimeFormat = DateTimeFormatter.ofPattern("HHmmss");
DateTimeFormatter neededDateTimeFormatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSS zzz",
Locale.forLanguageTag("en-AU"));
LocalDate today = LocalDate.now(australianTime);
LocalDate yesterday = today.minusDays(1);
String receivedTimeString = "180000";
LocalTime time = LocalTime.parse(receivedTimeString, receivedTimeFormat);
String previousDayAtTime = yesterday.atTime(time)
.atZone(australianTime)
.format(neededDateTimeFormatter);
System.out.println(previousDayAtTime);
我今天運行此代碼段時,它打印了昨天請求的輸出:
2017-11-16T18:00:00.000 AEDT
我相信您今天也會這樣做的。
因為您請求的結果中有AEDT,所以我選擇了澳大利亞/悉尼作為時區,而不是澳大利亞/達爾文或其他澳大利亞選項。
使用后端端口也是一種面向未來的解決方案:您只需要后端端口,直到有一天升級到Java 8或更高版本(Java 9已經推出)。升級時,只需將import
語句從org.threeten.bp
更改為java.time
即可。
這篇關于在Java中使用時區獲取特定日期的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,