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 中遇到解析异常,任何人都可以帮助我如何修复这个问题.
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
了解现代日期时间 API
注意: 我的专业领域是Java,因此我使用Java 语言编写代码。 Kotlin 支持按原样运行 Java 代码。 Kotlin 程序员可以轻松地将 Java 代码翻译成相应的 Kotlin 代码。而且,我的大部分代码都可以重用,就像在相应的 Kotlin 程序中一样。