Android 中输入日期解析异常 2023 年 9 月 11 日星期一 15:49:32 GMT

问题描述 投票:0回答:1
 fun calculateAge(dateString: String): String {
        val dateFormat = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z")
        dateFormat.timeZone = TimeZone.getTimeZone("GMT")
        val inputDate = dateFormat.parse(dateString)
        val currentCalendar = Calendar.getInstance()
        val inputCalendar = Calendar.getInstance()
        inputCalendar.time = inputDate
        val years = currentCalendar.get(Calendar.YEAR) - inputCalendar.get(Calendar.YEAR)
        val months = currentCalendar.get(Calendar.MONTH) - inputCalendar.get(Calendar.MONTH)
        val days = currentCalendar.get(Calendar.DAY_OF_MONTH) - inputCalendar.get(Calendar.DAY_OF_MONTH)

        return when {
            years > 0 -> "$years years "
            months > 0 -> "$months months"
            else -> "$days days"
        }
    }

我输入的日期是:Mon, 11 Sep 2023 15:49:32 GMT

我收到此异常:java.text.ParseException:无法解析的日期:“Mon, 11 Sep 2023 15:49:32 GMT”

这是一段使用此代码的代码,我正在尝试计算年龄,它在 Android 中的 API 级别 33 之前工作正常,但是当我尝试使用 API 级别 34 运行代码时,我在 Android 中遇到解析异常,任何人都可以帮助我如何修复这个问题.

android kotlin datetime simpledateformat datetime-parsing
1个回答
0
投票

java.time

2014 年 3 月,现代日期时间 API 取代了旧版日期时间 API。从那时起,强烈建议切换到现代日期时间 API

java.time

您的日期时间字符串符合

DateTimeFormatter.RFC_1123_DATE_TIME
格式。您可以从
LocalDate
中获取日期部分 (
OffsetDateTime
),这是使用此
DateTimeFormatter
解析给定日期时间字符串的结果。

获取 UTC 的当前

LocalDate
,然后使用
Period#between
查找这两个日期之间的周期。

var strDateTime = "Mon, 11 Sep 2023 15:49:32 GMT";
var dateFrom = OffsetDateTime.parse(strDateTime, DateTimeFormatter.RFC_1123_DATE_TIME)
               .toLocalDate();
var dateUntil = LocalDate.now(ZoneOffset.UTC);
var period = Period.between(dateFrom, dateUntil);
System.out.println(period);

// Formatted
System.out.println(formattedPeriod(period));

其中

formattedPeriod(Period)
是一个返回按您所需方式格式化的
String
的函数。

String formattedPeriod(Period period) {
    var years = period.getYears();
    var months = period.getMonths();
    var days = period.getDays();
    return years > 0 ? years + " years" : months > 0 ? months + " months" : days + " days";
}

输出:

P27D
27 days

在线演示

Trail:日期时间

了解现代日期时间 API

注意: 我的专业领域是Java,因此我使用Java 语言编写代码。 Kotlin 支持按原样运行 Java 代码。 Kotlin 程序员可以轻松地将 Java 代码翻译成相应的 Kotlin 代码。而且,我的大部分代码都可以重用,就像在相应的 Kotlin 程序中一样。

© www.soinside.com 2019 - 2024. All rights reserved.