我需要我的 Java Android 應用程式來提取和比較日期,但要獲得正確的日期是一團糟。
TimeZone timeZone = TimeZone.getTimeZone("GMT");
Calendar calendar = Calendar.getInstance(timeZone);
Date currentTime = calendar.getTime();
Log.i(logtag, "Date currentTime=" currentTime);
String tidspunkt = calendar.get(Calendar.YEAR) "." calendar.get(Calendar.MONTH) "." calendar.get(Calendar.DAY_OF_MONTH) " " calendar.get(Calendar.HOUR_OF_DAY) ":" calendar.get(Calendar.MINUTE) ":" calendar.get(Calendar.SECOND);
Log.i(logtag, "calendar.get(Calendar.YEAR)=" tidspunkt);
String tidspunkt2 = currentTime.getYear() "." currentTime.getMonth() "." currentTime.getDay() " " currentTime.getHours() ":" currentTime.getMinutes() ":" currentTime.getSeconds();
Log.i(logtag, "currentTime.getYear()=" tidspunkt2);
currentTime.setYear(calendar.get(Calendar.YEAR));
currentTime.setMonth((calendar.get(Calendar.MONTH)));
currentTime.setDate(calendar.get(Calendar.DAY_OF_MONTH));
currentTime.setHours(calendar.get(Calendar.HOUR_OF_DAY));
currentTime.setMinutes(calendar.get(Calendar.MINUTE));
currentTime.setSeconds(calendar.get(Calendar.SECOND));
Log.i(logtag, "Date currentTime edited=" currentTime);
String tidspunkt3 = currentTime.getYear() "." currentTime.getMonth() "." currentTime.getDay() " " currentTime.getHours() ":" currentTime.getMinutes() ":" currentTime.getSeconds();
Log.i(logtag, "currentTime.getYear() edited=" tidspunkt3);
實際運行時間:2022年1月10日星期一22:29
結果:
- 日期 currentTime=Mon Jan 10 22:29:53 GMT 01:00 2022(正確日期)
- calendar.get(Calendar.YEAR)=2022.0.10 21:29:53(錯誤的月份,錯誤的時間)
- currentTime.getYear()=122.0.1 22:29:53(年錯月錯日)
- 日期當前時間編輯=1 月 10 日星期二 21:29:53 GMT 01:00 3922(錯誤的年份、錯誤的作業日、錯誤的時間)
- currentTime.getYear() 編輯=2022.0.2 21:29:53 (錯誤的月份,錯誤的日期,錯誤的時間)
我需要將舊日期保存為物件,然后能夠從這些物件中提取正確的年、月數、日數等。所以我需要一個物件,我既可以從中提取日期,也可以設定為我需要的任何舊日期。
uj5u.com熱心網友回復:
這就是為什么java.util.Date并且java.util.Calendar是你應該用java.time. 你讀過檔案Date.setYear嗎?或者看到Calendar.JANUARY是0?
您可以使用java.time帶有脫糖功能的 Android 。
uj5u.com熱心網友回復:
避免遺留類
永遠不要使用 TimeZone、Calendar、Date。不要浪費時間試圖了解他們的奇怪行為。Sun、Oracle 和 JCP 社區幾年前就放棄了這些課程,你也應該這樣做。這些可怕的類在幾年前被JSR 310 中定義的現代java.time類所取代。
java.time
捕獲以 UTC 顯示的當前時刻(偏移量為零)。
Instant instant = Instant.now() ;
該類Instant是具有有限功能的基本構建塊類。要獲得更大的靈活性,請轉換為OffsetDateTime或ZonedDateTime。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Asia/Tokyo" ) ) ;
請注意,這里的所有這三個物件,instant,odt, & zdt,都代表相同的同時時刻,時間線上的相同單點。
要生成代表某個時刻的文本,您的作業量太大了。讓我們DateTimeFormatter做繁重的作業。
Locale locale = Locale.CANADA_FRENCH ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.LONG ).withLocale( locale ) ;
String output = zdt.format( f ) ;
Android 26 中內置了 java.time的實作。對于早期的 Android,最新的工具通過“API 脫糖”提供了大部分java.time功能。如果這對您不起作用,請使用ThreeTenABP專案java.time的后向埠。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411904.html
標籤:
