【问题标题】:How to convert time string into date and time format?如何将时间字符串转换为日期和时间格式?
【发布时间】:2021-11-09 03:20:47
【问题描述】:

我很难将字符串时间格式化为 MM:DD::YY 并且只有时间。从 IP 我得到以下格式的时间

2021-09-10T00:37:42Z

我想显示日期和时间:

09/08/2021

时间

09:50PM

【问题讨论】:

标签: java android datetime time format


【解决方案1】:

将给定的字符串解析为OffsetDateTime,然后从中获取LocalDateLocalTime 部分。

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String strDateTime = "2021-09-10T00:37:42Z";
        OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
        LocalTime time = odt.toLocalTime();
        LocalDate date = odt.toLocalDate();
        System.out.println(time);
        System.out.println(date);

        // #########Custom formats #########

        DateTimeFormatter dtfDate = DateTimeFormatter.ofPattern("MM/dd/uuuu", Locale.ENGLISH);
        String formattedDateString = date.format(dtfDate);
        System.out.println(formattedDateString);

        DateTimeFormatter dtfTime = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
        String formattedTimeString = time.format(dtfTime);
        System.out.println(formattedTimeString);
    }
}

输出:

00:37:42
2021-09-10
09/10/2021
12:37 AM

ONLINE DEMO

通过 Trail: Date Time 了解有关 modern Date-Time API* 的更多信息。

根据Ole V.V.的重要评论更新

OP(或他们的用户)可能希望日期和时间在他们自己的时间 区域。

为了获取特定时区的日期和时间部分,例如America/Los_Angeles,您应该将给定的日期时间字符串解析为ZonedDateTime,并使用ZonedDateTime#withZoneSameInstant 将其转换为特定时区的ZonedDateTime。其余内容将与原始答案相同。

演示:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String strDateTime = "2021-09-10T00:37:42Z";
        ZonedDateTime zdt = ZonedDateTime.parse(strDateTime);

        ZonedDateTime zdtLosAngeles = zdt.withZoneSameInstant(ZoneId.of("America/Los_Angeles"));

        LocalTime time = zdtLosAngeles.toLocalTime();
        LocalDate date = zdtLosAngeles.toLocalDate();
        System.out.println(time);
        System.out.println(date);

        // #########Custom formats #########

        DateTimeFormatter dtfDate = DateTimeFormatter.ofPattern("MM/dd/uuuu", Locale.ENGLISH);
        String formattedDateString = date.format(dtfDate);
        System.out.println(formattedDateString);

        DateTimeFormatter dtfTime = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
        String formattedTimeString = time.format(dtfTime);
        System.out.println(formattedTimeString);
    }
}

输出:

17:37:42
2021-09-09
09/09/2021
05:37 PM

ONLINE DEMO


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多