首页 > 解决方案 > 尽管格式化程序模式(java.time)不打印零秒

问题描述

我正在将 12 小时样式时间转换为 24 小时。问题是当秒数为“00”时,尽管有格式化程序模式,它们都不会被打印出来。为什么会发生这种情况以及如何打印零秒?

public static void main(String[] args) {
        String time_1 = "07:05:40PM";
        String time_2 = "07:05:00PM";

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm:ssa");

        System.out.println("time_1 " + LocalTime.parse(time_1, formatter));
        System.out.println("time_2 " + LocalTime.parse(time_2, formatter));
    }

输出是:

time_1 19:05:40
time_2 19:05

标签: javadatetimetimedatetime-formatjava-time

解决方案


用于DateTimeFormatterBuilder#parseCaseInsensitive以不区分大小写的方式解析时间。此外,请确保使用适当的格式来打印时间。

这样做

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;

public class Main {
    public static void main(final String[] args) {
        String time_1 = "07:05:40PM";
        String time_2 = "07:05:00PM";

        // Format to parse input time-string
        DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
                .parseCaseInsensitive()
                .appendPattern("hh:mm:ssa")
                .toFormatter();

        // 24-hour format
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("HH:mm:ss");

        System.out.println("time_1 " + LocalTime.parse(time_1, formatter1));
        System.out.println("time_2 " + LocalTime.parse(time_2, formatter1));
        System.out.println("time_2 " + formatter1.format(LocalTime.parse(time_2, formatter1)));
        System.out.println("time_2 " + formatter2.format(LocalTime.parse(time_2, formatter1)));
    }
}

输出:

time_1 19:05:40
time_2 19:05
time_2 07:05:00pm
time_2 19:05:00

推荐阅读