首页 > 解决方案 > 来自“hh:mm aa”的 JAVA 日期转换未列出正确的时间

问题描述

我对以下测试代码看到的内容有些困惑:

public class TheDateIssue {

    public static void main(String[] args) {
        String TIME_FORMAT = "hh:mm aa";
        try {
            Date theDate = new SimpleDateFormat(TIME_FORMAT).parse("13:15 pm");
            System.out.println("theDate: " + theDate);
        } catch (ParseException e) {
            System.out.println("Exception while converting string to Date. \n" + e.getLocalizedMessage());
        }
    }

要解析的时间是“13:15 pm”——但 sysout 输出列出了时间(在下面突出显示)。我期待太平洋标准时间 13:15:00太平洋标准时间下午 1:15:00

theDate: Fri Jan 02 **01:15:00 PST** 1970

我究竟做错了什么?:(

标签: java

解决方案


尝试这个:

LocalTime time = LocalTime.parse("13:15")
System.out.println(time.format(DateTimeFormatter.ofPattern("HH:mm a")));

或者:

ZonedDateTime time = ZonedDateTime.of(LocalDate.now(), LocalTime.parse("13:15"), ZoneId.of("America/Los_Angeles"));
System.out.println(time.format(DateTimeFormatter.ofPattern("HH:mm:ss zz")));

如果由于某种原因您被日期类卡住了,请以某种方式对其进行转换:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ssZ aa");
Date theDate = simpleDateFormat.parse("13:15:00 PST PM");
ZonedDateTime date = ZonedDateTime.ofInstant(theDate.toInstant(), ZoneId.of("America/Los_Angeles"));
System.out.println(date.format(DateTimeFormatter.ofPattern("HH:mm:ss zz")));

但你是对的,这是奇怪的行为。他们创建 LocalDate 等是有充分理由的,远离 Date 类。


推荐阅读