java - Java 和 Android 中的 SimpleDateFormat 有何不同?

标签 java android date datetime jvm

  1. 当我们从 JVM 调用 parseJavaAndroid("2018-04-27T22:31:07.962-05:00") 时,它会给出 ParseException,而从模拟器/Android 真实设备运行良好。

  2. 当我们将 SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ", Locale.ENGLISH) 更改为 SimpleDateFormat("yyyy-MM -dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH) 在 Android 中,它会抛出:

    IllegalArgumentException with message "Unknown pattern character 'X' method".

    它在 JVM 中运行良好,并在模拟器/Android 真实设备中给出 ParseException

public static Date parseJavaAndroid(String fromDate){
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ", Locale.ENGLISH);
    Date date=null;
    try {
        date = format.parse(fromDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}

应该做什么才能在 JVM 和 android 实时设备中工作(minSdkVersion:19)。我想要“2018-04-27T22:31:07.962-05:00”的模式,它适用于 Android 和 Java

注意:个人模式正在发挥作用,因此请不要向个人建议。

最佳答案

我无法告诉 Android,但在 JVM 中,Z 模式仅识别没有 : 的偏移量,例如 -0500 ,而 X 模式可以识别 -05:00:https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

也许 Android 有不同的实现,其中 Z 还可以识别带有 : 的偏移量,例如 -05:00

恐怕没有一种万能的解决方案:Z 在 JVM 中不起作用,X 在 Android 中不起作用,如何使其在两者中都起作用?我认为你能做的最好的事情就是尝试这两种模式,如下所示(伪代码):

try {
    parse with X
} catch(Exception e) {
    X didn't work, parse with Z
}

更好的替代方案是使用 threeten backport并配置ThreetenABP - 或使用java.time classes如果您的 API 级别是 26:

// parse input
OffsetDateTime odt = OffsetDateTime.parse("2018-04-27T22:31:07.962-05:00");

// convert to java.util.Date (threeten backport)
Date date = DateTimeUtils.toDate(odt.toInstant());

// or, if you have java.time (API level 26)
Date date = date.from(odt.toInstant());

关于java - Java 和 Android 中的 SimpleDateFormat 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49673279/

相关文章:

java - 从另一个类返回一个值到Android中的Activity

java - 检查 Date 对象是否在过去 24 小时内发生

Javascript 日期解析在 Chrome 中返回奇怪的结果

database - Postgres : How to insert only year in type date? 中的 ISO-8601(不完整的日期时间值)

java - 通过Interceptor或HttpEntity向RestTemplate添加http header ?

java - 无法执行目标org.springframework.boot :spring-boot-maven-plugin:2. 1.0.RELEASE

Android:如何在 ListView 的项目中将滑动手势与长按结合起来

java - 如何在 Hibernate/javax.persistence 中映射一个类和多个表?

java - 无法写入 JSON :Infinite recursion(StackOverflowError)nested exception is com. fastxml.jackson.databind.JsonMappingException:无限递归

android - 共享首选项是否在运行时存储在内存中?