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

尝试解析LocalDateTime时发生异常

侯沈义
2023-03-14
问题内容

我正在使用以下时间戳格式:

yyyyMMddHHmmssSSS

以下方法可以正常工作:

public static String formatTimestamp(final Timestamp timestamp, final String format) {
    final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
    return timestamp.toLocalDateTime().format(formatter);
}

而且,当我使用该格式字符串传递时间戳时,它返回,例如:

20170925142051591

然后,我需要再次从该字符串映射到时间戳,本质上是相反的操作。我知道我可以使用SimpleDateFormat和及其parse()方法,但是java.time如果可能的话,我宁愿坚持使用样式格式。

我写了这段代码(相当hacky),它适用于某些格式,但不适用于特定格式:

public static Timestamp getTimestamp(final String text, final String format, final boolean includeTime) {
    final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
    final TemporalAccessor temporalAccessor = formatter.parse(text);
    if (includeTime) {
        final LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);
        return DateTimeUtil.getTimestamp(localDateTime);
    } else {
        final LocalDate localDate = LocalDate.from(temporalAccessor);
        return DateTimeUtil.getTimestamp(localDate);
    }
}

在第二formatter.parse(text);部分,它失败了。

堆栈跟踪:

java.time.format.DateTimeParseException: Text '20170925142051591' could not be parsed at index 0
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.LocalDateTime.parse(LocalDateTime.java:492)
    at java.time.LocalDateTime.parse(LocalDateTime.java:477)
    at com.csa.core.DateTimeUtil.main(DateTimeUtil.java:169)

有没有一种更简单的方法可以在不利用我的情况下实现我想要的SimpleDateFormat


问题答案:

这是一个错误:https :
//bugs.openjdk.java.net/browse/JDK-8031085

上面的链接还提供了解决方法:在毫秒字段中使用java.time.format.DateTimeFormatterBuilder带有a
java.time.temporal.ChronoField的:

String text = "20170925142051591";
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    // date/time
    .appendPattern("yyyyMMddHHmmss")
    // milliseconds
    .appendValue(ChronoField.MILLI_OF_SECOND, 3)
    // create formatter
    .toFormatter();
// now it works
formatter.parse(text);

不幸的是,似乎没有办法使用only来解析它DateTimeFormatter.ofPattern(String)



 类似资料:
  • 我还更新了相关的XML文件,其中提到了spring security bean。我在用Postgres数据库。而且,在我的系统中,一切都运行良好,当我将这些更改提交到QA环境时,登录不工作。我在登录到应用程序时检查了日志,它显示了一些错误。这是日志 还有,如何检查ubuntu服务器中的PostgreSQL JDBC驱动程序版本?有人能帮我解决这个问题吗?谢谢

  • 问题内容: 启动Java应用程序时,尝试保存图像时出现异常。但是,在Eclipse中,一切正常。该应用程序是使用fatjar构建的,并且还选择了必需的库(jar_imageio.jar和ij.jar)进行导出。 我尝试使用ImageIO和ImageJ: a。)ImageIO: b。)ImageJ: 问题答案: 正如@Victor说的,我认为您应该看看 我昨天才遇到这个问题,这很棘手。有类似的问题在

  • 问题内容: 试图通过类强制转换异常在这里: 抛出此异常: 我不明白这一点-因为该类是由xjc.bat工具生成的-并且它生成的类我完全没有改变-所以这里应该没有强制转换问题- 解组员应该真的给了我一个类可以强制转换为FooClass。 关于我在做什么错的任何想法吗? 问题答案: 是否有注释?如果没有,请尝试: 这基于非官方的JAXB指南。

  • 我正在尝试使用Spark connector for Azure SQL Databases library(GitHub)从Spark获取数据并将其批量插入Azure数据库。我试图使用“ActiveDirectoryPassword”作为身份验证方法,但adal4j总是抛出一个声明javax的AuthenticationException异常。邮政互联网已引发ParseException。 我正

  • 问题内容: 我正在尝试使用java解析JSON字符串。我不知道该怎么做,我在互联网上搜索了很多内容,但有了一些主意。有了我,我有构建代码,但它不起作用。当尝试执行我的代码时,它将引发错误。我无法解决错误。 看到下面是我的代码: 我的JSON字符串在该文件中: 当我执行代码时,它会引发如下错误: 请帮助我解决这个问题,在此先感谢 问题答案: 您的json在Java中解析错误。在Java中,最大值为

  • 这是我第一次处理SSLSockets, 谢谢你, 编辑1:我启用了调试,这是调试: