[英]Replace deprecated Java Date to Calendar.set ou GregorianCalendar.set in a static context
我正在使用 Java 開發 Android 項目,Android Studio IDE 警告我 Date(int, int, int) 自 API16 起已棄用,但是當我將其替換為 Calendar.set 時,構建失敗,因為無法引用非靜態方法在靜態上下文中。
正在靜態的日期選擇器 onItenSelectedListener 上調用此方法
如果沒有可以真正使用的替代品,它如何被棄用?
使用 java.time 中的LocalDate
,現代 Java 日期和時間 API。 和它一起工作要好得多。
int year = 2019;
int month = 10;
int day = 15;
LocalDate date = LocalDate.of(year, month, day);
System.out.println(date);
此代碼段的輸出是:
2019-10-15
LocalDate
以與人類相同的方式計算年份和月份,因此無需減去有趣的值進行調整。 如果您需要一個尚未升級到 java.time 的 API 的Date
,則轉換過程如下:
Instant startOfDay = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
Date oldfashionedDate = DateTimeUtils.toDate(startOfDay);
System.out.println(oldfashionedDate);
2019 年 10 月 15 日星期二 00:00:00 CEST
類Date
、 Calendar
和GregorianCalendar
都設計得很差,而且都已經過時了。 所以請考慮不使用它們。
java.time 在較舊和較新的 Android 設備上都能很好地工作。 它只需要至少Java 6 。
Instant
轉換為Date
使用Date.from(startOfDay)
。org.threeten.bp
導入日期和時間類。java.time
。java.time
到 Java 6 和 7 的 backport(ThreeTen for JSR-310)。我解決了更換問題
return new Date(year-1900, month, day)
經過
GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
calendar.set(year, month-1, day);
return calendar.getTime();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.