【问题标题】:Converting String date/time values [duplicate]转换字符串日期/时间值[重复]
【发布时间】:2019-03-25 20:55:50
【问题描述】:

当涉及到一些在讲座中没有很好地向我解释的 Java 方法时,我目前面临一个问题。我需要编写一个程序,以yyyymmddhhss 格式接受用户输入的字符串(尤其是日期),然后将其转换为hh:mm Month day, year

E.g. 201901151500 outputs: "03:00 PM January 15, 2019". 

目前,在我的程序中,我已经接受了用户的输入并实现了一个方法,如果输入的格式无效,则返回错误消息。

关于从这里去哪里的任何提示?非常感谢您的建议-谢谢!

【问题讨论】:

标签: java string date java-time


【解决方案1】:

如果您使用的是 Java 8,则可以像这样使用 java.time API:

String input = "201901151500";
LocalDateTime dt = LocalDateTime.parse(input, DateTimeFormatter.ofPattern("uuuuMMddHHmm"));
String output = dt.format(DateTimeFormatter.ofPattern("hh:mm a MMMM dd, uuuu")); 
>> output = 03:00 PM janvier 15, 2019

【讨论】:

  • 简洁、快速、简单!我说快了吗? :-)
  • 仅供参考: 年份的正确模式符号是uuuu,因为模式没有指定时代 (G)。
  • @Andreas 我搜索了意思,我找到了你有用的答案here,已经投票给这个不错的答案,谢谢;)
  • @JustAFellowCoder 是的,你仍然可以技术上使用yyyy,如果你绝对 100% 保证那一年永远不会少 1. 因为你不'通常不要考虑它,最好养成始终使用uuuu 的习惯,这样您就不要忘记它实际上产生影响的几次。如果您阅读 YCF_L 链接到的my answer,您会看到称为defensive programming
  • 感谢您的帮助!
【解决方案2】:

使用此处定义的 DateTimeFormatter:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

注意解析方法。您可以定义一个格式化程序,它接收一个字符串,然后以某种方式返回它,几乎是您选择的任何方式。

这是 LocalDataTime 类: https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html

示例代码:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd");
LocalDateTime local = LocalDateTime.parse("2004 12 25", formatter);

【讨论】:

    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多