gpt4 book ai didi

java - 将静态上下文中已弃用的 Java Date 替换为 Calendar.set 或 GregorianCalendar.set

转载 作者:行者123 更新时间:2023-12-02 09:08:58 24 4
gpt4 key购买 nike

我正在使用 Java 开发 Android 项目,Android Studio IDE 警告我 Date(int, int, int) 从 API16 开始已被弃用,但是当我将其替换为 Calendar.set 时,构建因非静态方法而失败无法在静态上下文中引用。

在静态的日期选择器 onItenSelectedListener 上调用此方法

如果没有真正可以使用的替代品,如何废弃?

最佳答案

java.time 和 ThreeTenABP

使用现代 Java 日期和时间 API java.time 中的 LocalDate。合作起来更加愉快。

    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);

Tue Oct 15 00:00:00 CEST 2019

DateCalendarGregorianCalendar 类的设计都很糟糕,而且都已经过时了。因此,请考虑不使用它们。

问题:java.time 不需要 Android API 级别 26 吗?

java.time 在旧版和新版 Android 设备上都能很好地工作。它只需要至少 Java 6

  • 在 Java 8 及更高版本以及较新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。仅在这种情况下,从 Instant 转换为 Date 时才使用 Date.from(startOfDay)
  • 在非 Android Java 6 和 7 中获取 ThreeTen Backport,即现代类的向后移植(ThreeTen for JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保使用子包从 org. Threeten.bp 导入日期和时间类。

链接

关于java - 将静态上下文中已弃用的 Java Date 替换为 Calendar.set 或 GregorianCalendar.set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59562509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com