【问题标题】:Convert String datetime to Date not working Java Android [duplicate]将字符串日期时间转换为日期不起作用Java Android [重复]
【发布时间】:2021-07-23 08:07:36
【问题描述】:

我不知道为什么我不能在 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 );

【问题讨论】:

  • 我建议你不要使用SimpleDateFormatDate。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用OffsetDateTimeZonedDateTimeDateTimeFormatter,均来自java.time, the modern Java date and time API

标签: java android date datetime converters


【解决方案1】:

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

避免使用旧的日期时间类

您正在使用糟糕的日期时间类,这些类在几年前被 JSR 310 中定义的现代 java.time 类所取代。

DateTimeFormatter

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

注意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 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

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

从哪里获取 java.time 类?

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2016-03-08
    • 2013-09-07
    相关资源
    最近更新 更多