gpt4 book ai didi

datetime - Kotlin DateTimeParseException

转载 作者:行者123 更新时间:2023-12-01 23:33:46 27 4
gpt4 key购买 nike

https://api.spacexdata.com/v3/launches 获取日期此日期的格式为:2006-03-25T10:30:00+12:00。我想将它转换为“dd, mm, yyyy”,但总是出错:“java.time.format.DateTimeParseException:无法解析文本 '2006-03-25T10:30:00+12:00',在索引 10 处找到未解析的文本”

我的代码:

val formatter = DateTimeFormatter.ofPattern("dd, mm, yyyy", Locale.US)
val myDate = LocalDate.parse(launchDate, formatter)

var launchDateConverted: String= myDate.toString()

我在字符串中获取数据,然后将其转换为日期以进行格式化,然后将日期转换回字符串以在 UI 上显示。我使用了不同的方法,但找不到正确的方法。我当前的语言环境是“RU”。

最佳答案

您不需要任何格式化程序来解析您的输入字符串

你输入的字符串,2006-03-25T10:30:00+12:00已经是OffsetDateTime#parse使用的默认格式了因此,您不需要显式使用格式化程序来解析输入的日期时间字符串。

m 指定分钟,而M 指定

您错误地使用了 m 作为符号为 M 的月份。检查documentation page了解有关这些符号的更多信息。

y更喜欢u

y 指定年代(时代指定为ADBC)并且是始终为正数,而 u 指定 year,它是一个带符号 (+/-) 的数字。通常,我们不使用 + 符号来写入正数,但我们总是使用 - 符号指定负数。同样的规则适用于。只要您要使用时代的年份,AD(大多数情况下都是这样),yu 都会给你相同的号码。但是,当您使用时代的年份时,就会出现差异,例如 BC 时代1 BC 被指定为year0year-of-era2 BC 被指定为 year-1 等等。您可以通过以下演示更好地理解它:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Testing {
public static void main(String[] args) {
System.out.println(LocalDate.of(-1, 1, 1).format(DateTimeFormatter.ofPattern("u M d")));
System.out.println(LocalDate.of(-1, 1, 1).format(DateTimeFormatter.ofPattern("y M d")));
System.out.println(LocalDate.of(-1, 1, 1).format(DateTimeFormatter.ofPattern("yG M d")));

System.out.println();

System.out.println(LocalDate.of(0, 1, 1).format(DateTimeFormatter.ofPattern("u M d")));
System.out.println(LocalDate.of(0, 1, 1).format(DateTimeFormatter.ofPattern("y M d")));
System.out.println(LocalDate.of(0, 1, 1).format(DateTimeFormatter.ofPattern("yG M d")));

System.out.println();

System.out.println(LocalDate.of(1, 1, 1).format(DateTimeFormatter.ofPattern("u M d")));
System.out.println(LocalDate.of(1, 1, 1).format(DateTimeFormatter.ofPattern("y M d")));
System.out.println(LocalDate.of(1, 1, 1).format(DateTimeFormatter.ofPattern("yG M d")));
}
}

输出:

-1 1 1
2 1 1
2BC 1 1

0 1 1
1 1 1
1BC 1 1

1 1 1
1 1 1
1AD 1 1

注意:我使用 Java 来演示解决方案,但它也适用于 Kotlin。

最终解决方案:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
public static void main(String[] args) {
OffsetDateTime odt = OffsetDateTime.parse("2006-03-25T10:30:00+12:00");
System.out.println(odt);

// Format it into the desired pattern
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd, MM, uuuu", Locale.US);
String formatted = dtf.format(odt);
System.out.println(formatted);
}
}

输出:

2006-03-25T10:30+12:00
25, 03, 2006

Trail: Date Time 了解有关现代日期时间 API 的更多信息.

关于datetime - Kotlin DateTimeParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65908827/

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