将字符串日期时间转换为日期无效 Java Android

Convert String datetime to Date not working Java Android

我不知道为什么我无法在 Java Android 中将字符串转换为日期。我在尝试时出错

错误:

W/System.err: java.text.ParseException: Unparseable date: "Fri Apr 30 00:12:13 GMT+02:00 2021"

我的代码:

String datestr = cursor.getString(cursor.getColumnIndex(UPDATED_AT)); // Fri Apr 30 00:12:13 GMT+02:00 2021
DateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.GERMANY);
myDate = dateFormat.parse(datestr);

编辑:

我现在是最新的(我认为):

我将所有日期转换为

OffsetDateTime currentDate = OffsetDateTime.now()

这给了我:

2021-04-30T02:14:49.067+02:00

那么如果这个日期是一个字符串,我想把它转换成 OffsetDateTime :

String datestr = cursor.getString(cursor.getColumnIndex(UPDATED_AT)); // 2021-04-30T02:14:49.067+02:00
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").withLocale( Locale.US );
OffsetDateTime myDate = OffsetDateTime.parse( datestr , f );

tl;博士

OffsetDateTime
.parse( 
    "Fri Apr 30 00:12:13 GMT+02:00 2021" , 
    DateTimeFormatter
    .ofPattern( "EEE MMM dd HH:mm:ss OOOO uuuu" )
    .withLocale( Locale.US ) 
)
.toString()

2021-04-30T00:12:13+02:00

避免遗留日期时间 classes

您使用的是可怕的日期时间 classes,几年前被 JSR 中定义的现代 java.time classes 取代310.

DateTimeFormatter

定义格式模式以匹配您的输入文本。使用 DateTimeFormatter class.

注意 Locale,以确定在翻译日期和月份名称、大写、缩写等时使用的人类语言和文化规范。

String input = "Fri Apr 30 00:12:13 GMT+02:00 2021";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss OOOO uuuu" ).withLocale( Locale.US );

OffsetDateTime

您的输入代表一个时刻,时间轴上的一个点,如从 UTC 偏移的挂钟时间中看到的,而不是时区。因此,解析为 OffsetDateTime 对象。

OffsetDateTime odt = OffsetDateTime.parse( input , f );

odt.toString() = 2021-04-30T00:12:13+02:00


关于java.time

java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.

要了解更多信息,请参阅 Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310

Joda-Time project, now in maintenance mode, advises migration to the java.time classes.

您可以直接与数据库交换 java.time 对象。使用 JDBC driver compliant with JDBC 4.2 或更高版本。不需要字符串,不需要 java.sql.* classes。 Hibernate 5 和 JPA 2.2 支持 java.time.

从哪里获得 java.time classes?