gpt4 book ai didi

java - 使用 SimpleDateFormat 返回日历

转载 作者:行者123 更新时间:2023-12-02 09:23:29 25 4
gpt4 key购买 nike

我想使用 SimpleDateFormat 返回日历的值 + 14 个月,但收到以下错误。

private fun bestBeforeDate(cal: Calendar = Calendar.getInstance()): String
{
cal.add(Calendar.MONTH, 14)
val format1 = SimpleDateFormat("dd-MM-yyy", Locale.getDefault()).format(this)
return getString(R.string.best_before_date) + format1.format(cal)
}
java.lang.IllegalArgumentException: Cannot format given Object as a Date

最佳答案

java.time 和 ThreeTenABP

抱歉,我只能用 Java 编写这个。请你自己翻译一下。您的任务最好使用 java.time(现代 Java 日期和时间 API)来解决。

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");
LocalDate date = LocalDate.now(ZoneId.of("Europe/London")).plusMonths(14);
String result = date.format(dateFormatter);
System.out.println("Result: " + result);

今天运行时的输出:

Result: 22-12-2020

修复代码

如果您坚持使用众所周知的麻烦且早已过时的 SimpleDateFormat 类,只需从代码中删除 .format(this) 即可。我敢打赌异常是从那里来的,这是错误的,因为您在下一行中对 format 方法进行了几乎正确的调用。

private fun bestBeforeDate(cal: Calendar = Calendar.getInstance()): String
{
cal.add(Calendar.MONTH, 14)
val format1 = SimpleDateFormat("dd-MM-yyyy")
return getString(R.string.best_before_date) + format1.format(cal.time)
}

format 方法需要一个Date(另一个设计不佳且早已过时的类)或一个Long。由于 this 不是其中任何一个,因此您得到了异常(exception)。

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

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

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

链接

关于java - 使用 SimpleDateFormat 返回日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58505052/

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