【问题标题】:How to convert any type of Date to a particular format in android?如何在android中将任何类型的日期转换为特定格式?
【发布时间】:2018-09-10 09:33:55
【问题描述】:

从服务器接收的日期不固定为特定格式,那么如何检测得到的格式,以便我可以将其转换为特定的日期格式并根据功能显示在应用程序中。

以下是收到的一些示例:

2018-09-10T10:35:00.377Z
2018-09-10T10:35:00.12Z
2018-09-10

提前致谢!

【问题讨论】:

  • 你想如何显示输出??
  • 其实我得根据功能在不同的屏幕上显示3-4个选项,这没什么大不了的,主要是检测输入格式
  • "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 读取字符串和子字符串并检查是否与模式匹配。尝试定义您可能从服务器接收到的所有模式。
  • 谢谢@Ankita-user3449434,我已经尝试过这个,它只在输入日期为“yyyy-MM-dd'T'HH:mm:ss.SSSZ”格式并且应用程序崩溃时才有效当格式不同时,例如“yyyy-MM-dd'T'HH:mm:ssZ”
  • 像,我想知道检查输入日期格式化程序的任何默认方法?

标签: java android date


【解决方案1】:

java.time

    String[] exampleStrings = {
            "2018-09-10T10:35:00.377Z",
            "2018-09-10T10:35:00.12Z",
            "2018-09-10"
    };

    for (String example : exampleStrings) {
        if (example.contains("T")) {
            OffsetDateTime dateTime = OffsetDateTime.parse(example);
            System.out.println("Date: " + dateTime.toLocalDate() 
                    + " Time: " + dateTime.toLocalTime() 
                    + " Offset: " + dateTime.getOffset());
        } else {
            LocalDate date = LocalDate.parse(example);
            System.out.println("Date: " + date);
        }
    }

您的格式是 ISO 8601 的允许变体。java.time,现代 Java 日期和时间 API,无需任何显式格式化程序即可解析这些格式。前两个示例字符串具有日期和时间以及用于分隔它们的特征 T,以及与 UTC 的偏移量(Z 表示偏移量 0)。第三个只有一个日期。所以测试字符串中是否有T,其余的使用对应的java.time类。

上述sn-p的输出为:

Date: 2018-09-10 Time: 10:35:00.377 Offset: Z
Date: 2018-09-10 Time: 10:35:00.120 Offset: Z
Date: 2018-09-10

我不知道您将如何在其余代码中处理OffsetDateTime 和LocalDate 这两种不同类型。如果您不需要时间部分,只需要日期,请使用 dateTime.toLocalDate() 获取 LocalDate 并在所有情况下传递此类型。由于您确实需要时间部分,因此根据您的情况和要求,您可能会避开相反的转换:在日期情况下,您可能会从例如date.atStartOfDay().atOffset(ZoneOffset.UTC) 获得OffsetDateTime,但请检查这是否给出合适的时间。

不过,我确实同意 Khemraj 现在已删除的答案,即您的服务器应该能够提供一种一致的格式,或者至少指出它为您提供的格式。

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少 Java 6。

  • 在 Java 8 及更高版本以及更新的 Android 设备上(据我所知,从 API 级别 26 开始),现代 API 是内置的。
  • 在 Java 6 和 7 中,获取 ThreeTen Backport,即新类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。

链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多