【问题标题】:Trying to parse just time with DateTimeFormatter尝试使用 DateTimeFormatter 解析时间
【发布时间】:2015-08-26 01:21:50
【问题描述】:

无法使用 DateTimeFormatter 仅解析 LocalTime 变量的“时间”。尝试了几种不同的格式,但没有看到我缺少的内容(因为我使用的是 DateTimeFormatter,所以我需要一个日期组件,但我只使用 LocalDate 没有问题,文档说它支持 LocalTime)。

提前感谢任何帮助/链接识别导致异常的错误。

在此 SSCCE 中复制:

import java.awt.*;
import java.time.*;
import java.time.format.*;

public class SSCCE {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable(){          
            @Override
            public void run() {
                String word = "";

                word = "1200am";
//              System.out.println(LocalTime.parse(word.toLowerCase(),  DateTimeFormatter.ISO_LOCAL_TIME).toString());
                System.out.println(LocalTime.parse(word.toLowerCase(), DateTimeFormatter.ofPattern("hhmma")).toString());
//              System.out.println(LocalTime.parse(word.toLowerCase(), DateTimeFormatter.ofPattern("hmma")).toString());
//              System.out.println(LocalTime.parse(word.toLowerCase(), DateTimeFormatter.ofPattern("HHmma")).toString());
//              System.out.println(LocalTime.parse(word.toLowerCase(), DateTimeFormatter.ofPattern("Hmma")).toString());
//              System.out.println(LocalTime.parse((CharSequence)word.toLowerCase(), DateTimeFormatter.ofPattern("hhma")).toString());

            word = "8PM";
            System.out.println(LocalTime.parse(word.toLowerCase(), DateTimeFormatter.ISO_LOCAL_TIME).toString());           
            }
        });
    }
}

...我得到了这个堆栈跟踪:

线程“AWT-EventQueue-0”java.time.format.DateTimeParseException 中的异常: 无法在索引 4 处解析文本“1200am” 在 java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:194 7) 在 java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849) 在 java.time.LocalTime.parse(LocalTime.java:441) 在 SSCCE$1.run(SSCCE.java:14) 在 java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 在 java.awt.EventQueue.access$500(EventQueue.java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:709) 在 java.awt.EventQueue$3.run(EventQueue.java:703) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.ja 弗吉尼亚州:75) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java :201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:11 6) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java :105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

【问题讨论】:

    标签: java parsing localtime


    【解决方案1】:

    您应该将其转换为大写而不是小写,因为DateTimeFormatter 只会解析大写AM/PM

    System.out.println(LocalTime.parse(word.toUpperCase(),
            DateTimeFormatter.ofPattern("hhmma")).toString());
    
    // will print 00:00
    

    【讨论】:

    • 谢谢。我知道我错过了一些愚蠢的事情!
    猜你喜欢
    • 1970-01-01
    • 2022-11-12
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2018-08-06
    • 2020-01-05
    相关资源
    最近更新 更多