当前位置: 首页 > 知识库问答 >
问题:

带有特殊模式的日期格式[副本]

陈嘉荣
2023-03-14

我输入的日期像4月17日,2024年。日期是由谷歌语音转文本服务构建的。

要将此日期格式化为不同的格式,我将使用下一段代码

        String input = "April 17th, 2024";
        DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM d, uuuu" )
                .withLocale( Locale.US );
        ZonedDateTime zdt = ZonedDateTime.parse( input , f );

        LocalDate ld = zdt.toLocalDate();
        DateTimeFormatter fLocalDate = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
        String output = ld.format( fLocalDate);
        System.out.println(output);

我更愿意避免添加额外的逻辑和改进输入数据的日期模式。正是在这一步,我需要帮助(我在java文档中找不到正确的解决方案)。

所以我希望得到格式化程序的更正或确认,java不支持日期可以是17th3th等等的标准。

共有1个答案

方玄天
2023-03-14

看来java.time不支持序数。

我能想到的一个“模式解决方案”是使用可选部分(即[]之间的字符)的方案:mmmm d['th']['st']['nd']['rd'],yyyy

例如:

jshell> var fmt = DateTimeFormatter.ofPattern("MMMM d['th']['st']['nd']['rd'], yyyy").withLocale(Locale.US)
fmt ==> Text(MonthOfYear)' 'Value(DayOfMonth)['th']['st'] ... earOfEra,4,19,EXCEEDS_PAD)

jshell> LocalDate.parse("April 17th, 2024", fmt)
$63 ==> 2024-04-17

jshell> LocalDate.parse("April 1st, 2024", fmt)
$64 ==> 2024-04-01

jshell> LocalDate.parse("April 3rd, 2024", fmt)
$65 ==> 2024-04-03

jshell> LocalDate.parse("April 4, 2024", fmt)
$66 ==> 2024-04-04
jshell> LocalDate.parse("April 1fo, 2024", fmt)
|  Exception java.time.format.DateTimeParseException: Text 'April 1fo, 2024' could not be parsed at index 7
|        at DateTimeFormatter.parseResolved0 (DateTimeFormatter.java:2046)
|        at DateTimeFormatter.parse (DateTimeFormatter.java:1948)
|        at LocalDate.parse (LocalDate.java:428)
|        at (#68:1)

jshell> LocalDate.parse("April 1baar, 2024", fmt)
|  Exception java.time.format.DateTimeParseException: Text 'April 1baar, 2024' could not be parsed at index 7
|        at DateTimeFormatter.parseResolved0 (DateTimeFormatter.java:2046)
|        at DateTimeFormatter.parse (DateTimeFormatter.java:1948)
|        at LocalDate.parse (LocalDate.java:428)
|        at (#69:1)
jshell> LocalDate.parse("April 1th, 2024", fmt)
$67 ==> 2024-04-01

并且它还将接受janarian3thstndrd,2024。我不知道是否会有问题:

jshell> LocalDate.parse("January 3thstndrd, 2024", fmt)
$97 ==> 2024-01-03
 类似资料:
  • 问题内容: 我得到一个Date对象,我需要将其转换为XMLGregorian Calendar特定格式 我尝试了以下方法 我有一个例外,可以肯定的是我在这里做错了。但是我想将Date对象格式化为指定的格式,这可以完美地由sdf.format完成。 但是,如何为同一对象(来自formattedDate)创建XMLGregorianCalendar对象? 问题答案: 您可以通过date对象本身来实现:

  • 但这对对象没有任何影响,它还是用旧格式的,不能真正理解它为什么会那样。

  • 以下是在日期格式化模式中使用字符。 Sr.No. 类和描述 1 G 要显示时代。 2 y 显示年份。 有效值yy,yyyy。 3 M 显示月份。 有效值MM,MMM或MMMMM。 4 d 显示月份的日期。 有效值d,dd。 5 h 显示一天中的小时(上午1-12点/下午)。 有效值hh。 6 H 显示一天中的小时(0-23)。 有效值HH。 7 m 显示小时(0-59)。 有效值mm。 8 s 显

  • 问题内容: 使用MySQL 表 询问 我想以特定格式显示日期 预期产量 如何在mysql中进行查询。 需要查询帮助 问题答案: 您可以将DATE_FORMAT与格式字符串’%d-%M-%Y’一起使用。 结果:

  • 类似于: 2016年4月1日 2016年4月3日 2016年4月22日的日期格式将是什么 那么有没有API可以这样解析日期呢? 编辑:重复的问题不包含任何关于分析日期1(st)、2(nd)、3(rd)的答案。我不知道如何分析第1中的st,第2中的nd和第3中的rd。

  • 我需要按照格式解析日期,但它没有很好地工作。 我需要日期对象在07/06/2013格式,即使日期是任何格式。但parse方法总是在2013年6月7日00:00:00 PKT星期五返回。