首页 > 解决方案 > 从 Android 中的字符串中提取

问题描述

由于我是编程新手,因此我需要一些帮助。如果我有一个字符串,例如下面的字符串。在这里,您可以看到日期和时间包含在一个字符串中。

String date_time = "2018-03-18T01:39:45+01:00";

无论如何只能从字符串中提取日期。

“2018-03-18”

情况是我有一个包含日期和时间的完整字符串,但我需要为自己提取日期和时间,所以我可以单独使用它。

编辑

抱歉,但我认为最近的热度已经影响了我。我忘了提到字符串存储在 arraylst

List<String> allDate_time = new ArrayList<String>();

JSONObject date_timeArray = json2.getJSONObject( 0 );

String date_time = date_timeArray.getString( "date_time" );

allDate_time.add( date_time );

dateView = (TextView) findViewById( R.id.dateTX );

dateView.setText( allDate_time.get( 0 ));

标签: androidstringextract

解决方案


java.time

    List<String> allDate_time = new ArrayList<>();
    String date_time = "2018-03-18T01:39:45+01:00";
    allDate_time.add( date_time );

    for (String dateTimeString : allDate_time) {
        OffsetDateTime odt = OffsetDateTime.parse(dateTimeString);
        LocalDate date = odt.toLocalDate();
        LocalTime timeOfDay = odt.toLocalTime();
        System.out.println("Date: " + date + ". Time: " + timeOfDay + '.');
    }

输出:

日期:2018-03-18。时间:01:39:45。

由于现代 Java 日期和时间 API 的OffsetDateTime类在java.time没有任何显式格式化程序的情况下解析您的日期时间字符串,因此不利用它几乎是遗憾的。为什么它如此简单的解释是您的字符串采用 ISO 8601 格式,并且java.time解析这种格式的类作为它们的默认值。

如果您不确定字符串(此处+01:00)中的偏移量是否与用户的时区一致,请在提取日期和时间之前转换为该时区。例如:

        ZonedDateTime zdt = odt.atZoneSameInstant(ZoneId.of("America/Argentina/Cordoba"));
        LocalDate date = zdt.toLocalDate();
        LocalTime timeOfDay = zdt.toLocalTime();

通过此更改,输出为:

日期:2018-03-17。时间:21:39:45。

我的建议:

  • 使用标准库中的类将日期和时间作为日期和时间对象处理。从长远来看,这比依赖字符串操作更稳定、更容易,并且代码更易于阅读和维护。
  • 而不是旧的类DateSimpleDateFormat在另一个答案中使用,而是在java.time. Date并且SimpleDateFormat是遗产,SimpleDateFormat尤其是出了名的麻烦。

问题:我可以在 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子包中导入日期和时间类。

链接


推荐阅读