当前位置: 首页 > 面试题库 >

自定义日期格式无法解析。(Java)

宣冥夜
2023-03-14
问题内容

我必须在Java中使用自定义日期格式。尽管Java不提供对微秒的支持,但它包含微秒。因此,我用零填充了时间模式,在格式化时它可以很好地工作,但是我无法使用该模式解析日期字符串。

有没有简单的解决方法,还是我必须自己处理微秒(使用String函数)?

@Test
public void testDateFormat() throws ParseException {
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS000");
    String theDate = format.format(new Date());
    // this will fail:
    format.parse(theDate);
}

java.text.ParseException:无法解析的日期:“ 2010-01-25-12.40.35.769000”


问题答案:

您的问题是,不幸的是,根据SimpleDateFormat中使用的模式是用作解析器还是用作格式化程序,其含义不同。作为格式化程序,您的模式可以完成预期的工作,输出将以毫秒值结尾,该值设置为三位数字,后跟三个0字符,例如:

2010-01-25-14.17.47.307000

但是,用作解析器的“ SSS”模式将匹配任意数量的数字,并将上述示例解析为307000 ms。解析了ms字段之后,解析器仍将寻找“
000”子字符串,并且由于出现异常而失败,因为您已经达到了输入字符串的末尾,而没有满足模式的要求。

由于SimpleDateFormat中没有用于µs值的模式,因此,在将输入字符串提供给SimpleDateFormat之前,您必须编写自己的包装程序以除去最后三个0字符的输入字符串。



 类似资料:
  • 问题内容: 我的日期格式 (可以是其他任何 格式 ) ,我需要在date命令中使用它。不是美国格式。它是德语服务器,因为它是德语服务器。这在美国服务器上也无法正常工作。(语言环境设置为德语或美国) 这不起作用(包括错误): (日期:ungültigesDatum„ Do 19 Dez 2013 22:33:28 CET“ =) 困难在于我不知道以后将使用哪种语言环境,甚至不知道日期格式,因为用户可

  • 我想在Java中解析自定义的多种日期格式。这是我的代码 场景1:模式的顺序: yyMMdd'h'HH yyMMdd DateTimeFormatter-formatter=new DateTimeFormatterBuilder().appendOptional(模式的日期时间格式设置工具(“yyMMdd'h'HH”)).appddOptional(格式的日期时间格式化工具(“yyMMdd”).t

  • 问题内容: 我想解析日期字符串,例如使用格式。但是我有一个例外。 问题答案: 您的解析字符串不正确,正如别人提到的那样 要正确解析,您需要使用英语语言环境,否则,如果您的默认语言环境不是英语,则可能会失败 DateFormat df = new SimpleDateFormat(“MMM dd, yyyy”, Locale.ENGLISH); Date dt = df.parse(“Februar

  • 问题内容: 我正在寻找一个Java库,该库可以将字符串解析为POJO,而无需指定格式。我研究了POjava。还有其他类似的图书馆吗? 我发现以下具有相同问题的Java链接智能日期/时间解析器,但不是非常有用的答案。Joda或JChronic都不满足我的要求。如果我错了,请纠正我。 更新: 我说Joda不能解决我的目的的原因是,Joda希望将字符串解析为ISO8601格式或您指定的任何格式(例如“

  • 在使用date格式自动设置为IE后,我试图解析某个包含日期条目为纪元数值的json文档。我需要不同的格式(也需要一毫秒) 所以问题是,如何解析IE。转换为带有Bson文档的某种自定义格式字符串。解析方法? 编辑:只是一个更新:问题在document.parse方法中,因为我不知道如何在解析json文档时使用tell.parse函数来使用自定义的日期格式。我总是得到某种默认的日期格式。如何发送给.p

  • 我想以yyyy-mm-dd格式存储今天的日期。在存储之前,我将今天的日期格式化,并再次解析格式化后的字符串。它以不同于我想要的格式给出了输出日期。我如何获得日期,将其格式化为' yyyy-mm-dd '并再次将其转换为日期,并希望输出格式为' yyyy-mm-dd '。请找到下面的代码,告诉我哪里错了 我得到的上述代码的输出是星期四 Mar 07 00:00:00 GMT 2013.但我希望输出为