代码之家  ›  专栏  ›  技术社区  ›  flyingfox

如何用joda在一个格式化程序中将两个类似的字符串解析为datetime?

  •  2
  • flyingfox  · 技术社区  · 6 年前

    String date1 = "2018-10-12 18:01:01";// yyyy-MM-dd HH:mm:ss
    String date2 = "2018-10-12 18:01";//yyyy-MM-dd HH:mm
    

    我正在使用 joda 我想把字符串转换成 DateTime

    DateTimeFormatter formatter1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
    DateTimeFormatter formatter2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm");
    DateTime dt1 = formatter1.parseDateTime(date1);
    DateTime dt2 = formatter2.parseDateTime(date2);
    

    上面的代码块工作得很好,但它创建了两个格式化程序,因为日期格式化程序非常相似(后一个只是缺少秒),我想知道是否有一种方法,我可以只使用一个格式化程序来解析它们,还是我必须使用两个格式化程序?

    由于生产环境的限制,我不能使用 java8 现在,我想根据

    提前谢谢!


    IllegalArgumentException: Invalid format

    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
    DateTime dt1 = formatter.parseDateTime(date1);
    DateTime dt2 = formatter.parseDateTime(date2);
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Anonymous    6 年前

    1. 通过ThreeTen Backport库使用java.time,即现代java日期和时间API。

    现在要求用户迁移到 java.time (JSR-310)。

    没有重大的增强计划。如果使用JavaSE8,请迁移 到 java.time文件

    好消息是,即使使用Java 6或7,您也可以进行迁移。Java.time的开发人员(由Stephen Colebourne领导,也是Joda time的首席开发人员)也开发了ThreeTen Backport,Java 6和7的Java.time的Backport。请参阅底部的链接。

    安东巴拉纽克已经在他的好答案中展示了代码,所以我在这里重复这一点没有用。

    乔达时间

        String date1 = "2018-10-12 18:01:01";// yyyy-MM-dd HH:mm:ss
        String date2 = "2018-10-12 18:01";//yyyy-MM-dd HH:mm
        DateTimeFormatter parser = new DateTimeFormatterBuilder()
                        .appendPattern("yyyy-MM-dd HH:mm")
                        .appendOptional(DateTimeFormat.forPattern(":ss").getParser())
                        .toFormatter();
        DateTime dt1 = parser.parseDateTime(date1);
        DateTime dt2 = parser.parseDateTime(date2);
        System.out.println("dt1: " + dt1);
        System.out.println("dt2: " + dt2);
    

    在我位于欧洲/哥本哈根时区的计算机上,此片段的输出为:

    dt1: 2018-10-12T18:01:01.000+02:00
    dt2: 2018-10-12T18:01:00.000+02:00
    

    appendOptional 方法 DateTimeFormatterBuilder .

        2
  •  3
  •   Anton Balaniuc    6 年前

    您可以使用 []

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm[:ss]");
    LocalDateTime dateTime = LocalDateTime.parse("2018-10-12 18:01:01", formatter);
    LocalDateTime dateTime1 = LocalDateTime.parse("2018-10-12 18:01", formatter);
    System.out.println(dateTime + " " + dateTime1);
    

    结果是

    2018-10-12T18:01:01 2018-10-12T18:01
    

    Patterns for Formatting and Parsing 有关详细信息,请参阅。

        3
  •  0
  •   Mladen Savić    6 年前

    你可以用 DateTimeFormatterBuilder 同学们,像这样的。

      private DateTimeFormatter formatterBuilder() {
            return new DateTimeFormatterBuilder()
                    .appendPattern("yyyy-MM-dd HH:mm")
                    .optionalStart().appendPattern(":ss").optionalEnd()
                    .toFormatter();
        }