Java正则表达式从字符串中获取HH:MM:SS

Zos*_*619 1 java regex time timeofday

String time = "Thu Dec 22 01:12:22 UTC 2022";

如何01:12:22使用 java regex 获取此处的 HH:MM:SS ()。所以输出应该是 01:12:22 我正在使用下面的代码,但它不起作用。

    System.out.println("Hello, World!");
    String time = "Thu Dec 22 01:12:22 UTC 2022";
    String pattren = "(?:2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]";
    Pattern p = Pattern.compile(pattren);
    Matcher m = p.matcher(time);
    System.out.println("h");

    while (m.find()) {
        System.out.println(m.group(1));
    }
Run Code Online (Sandbox Code Playgroud)

Arv*_*ash 5

正则表达式不是满足您要求的正确工具

正如 anubhava 和 Basil Bourque 所建议的,这里使用的最佳工具是日期时间 API。

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

class Main {
    public static void main(String[] args) {
        String strDateTime = "Thu Dec 22 01:12:22 UTC 2022";
        DateTimeFormatter parser = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss VV uuuu", Locale.ENGLISH);
        ZonedDateTime zdt = ZonedDateTime.parse(strDateTime, parser);
        LocalTime time = zdt.toLocalTime();
        System.out.println(time);

        // Or get the string representation
        String strTime = time.toString();
        System.out.println(strTime);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

01:12:22
01:12:22
Run Code Online (Sandbox Code Playgroud)

Ole VV 的一条重要建议:如果时间子字符串的秒数为零01:12:00,则默认实现LocalTime#toString将删除尾随:00。这样,您还需要一个格式化程序来格式化时间。

class Main {
    public static void main(String[] args) {
        String strDateTime = "Thu Dec 22 01:12:00 UTC 2022";
        DateTimeFormatter parser = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss VV uuuu", Locale.ENGLISH);
        ZonedDateTime zdt = ZonedDateTime.parse(strDateTime, parser);
        LocalTime time = zdt.toLocalTime();

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss", Locale.ENGLISH);
        String strTime = time.format(formatter);
        System.out.println(strTime);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

01:12:00
Run Code Online (Sandbox Code Playgroud)

从Trail: Date Time中了解有关现代日期时间 API 的更多信息。