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

Java日期时间格式或?

薛华奥
2023-03-14

有没有一种方法可以编写一个DateTimeForith模式,该模式解析器“要么”两个可选部分之一?类似于(MMMM-d-(yy OR yyyy))?

例如:

val formatter = DateTimeFormatter.ofPattern("MMMM-d-[yyyy][yy]");
System.out.println(formatter.parse("June-27-2022")); // {},ISO resolved to 2022-06-27
System.out.println(formatter.parse("June-27-22")); // {},ISO resolved to 2022-06-27
System.out.println(formatter.parse("June-27-")); // {MonthOfYear=6, DayOfMonth=27},ISO

我想分析短(yy)或长(yyy)年格式。我的模式的问题是,最后一个示例在没有定义模式的这些可选部分的情况下被解析。


共有2个答案

方增
2023-03-14

我会采用以下想法:在一些属性文件中准备你支持的格式列表,每当一个字符串出现时,试着一个接一个地用你支持的格式列表解析它。如果成功了,你会得到你的答案。请注意,格式列表中的顺序也可能很重要,因为一些字符串可以适合多种格式。例如01-02-2022可能是1月2日或2月1日。所以,如果你优先考虑欧元格式而不是美国,那么就把它放在第一位,反之亦然。我曾经不得不处理这个问题,我写了一篇关于这个想法和实现的详细文章。Java8java.time包:解析迄今为止的任何字符串

楚浩然
2023-03-14

一个选项是创建多个格式化程序的列表,每个格式化程序都有自己的模式。依次尝试每一个,直到其中一个成功。如果没有人成功解析输入字符串,则给出一个错误。

 类似资料:
  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y

  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y

  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y

  • 问题内容: 在这里约会我的问题: 我知道该字符串位于UTC时区。我需要将此字符串转换为“ yyy-mm-dd’T’HH:mm:ssZ”格式。 为此,我使用以下代码: 问题是此代码在时区UTC + 1的服务器上运行,其结果是: 它从初始时间删除2小时,并放置UTC时间戳(0000)。 你能帮我解决这个问题吗?谢谢。 问题答案: 如果输出格式为UTC + 1,则应在外包格式器中使用该格式,而不是UTC

  • 问题内容: 我有一行C#代码,试图在Java中复制。代码如下。 目的是将xml上下文中已经存在的DateTime替换为代表通用时间的DateTime。 我尝试使用 但由于不推荐使用Date.parse()而无法继续。我通读了Eclipse中的注释,并按建议尝试使用DateFormat,但DateFormat没有解析方法。 有人可以建议不使用任何第三方库的问题解决方案吗? 问题答案: 您可以使用:

  • 问题内容: 我需要改变从一个日期/时间 2014年8月20日15:30:00 看起来像 二○一四年八月二十○日下午3:30 可以使用javascript的Date对象完成此操作吗? 问题答案: 是的,您可以使用本地javascript Date() 对象 及其方法。 例如,您可以创建一个类似以下的函数: 并显示上午/下午和正确的时间。 请记住使用 getFullYear() 方法,而不要使用get