【问题标题】:conversion from java sql date to java localdate从 java sql 日期到 java localdate 的转换
【发布时间】:2019-07-05 07:39:20
【问题描述】:
    String oldDate = "04-07-19 02:41:39.063000000 PM";
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .appendPattern("dd-MM-YY HH:mm:ss")
                .appendFraction(ChronoField.NANO_OF_SECOND, 1, 9, true)
                .padNext(1)
                .appendText(ChronoField.AMPM_OF_DAY)
                .toFormatter();

LocalDate parseDate = LocalDate.parse(oldDate, formatter);

我在数据库中的日期是“04-07-19 02:41:39.063000000 PM” 我想解析日期并将其转换为我方便的形式。 但是当我尝试使用上面提到的 DateTimeFormatter 解析日期时,代码会抛出异常..

新日期应采用下述格式

String newDate = parseDate.format(DateTimeFormatter.ofPattern("dd-MMMM-uuuu"));

有人可以帮我跟踪错误吗?

我得到的异常是

Exception in thread "main" java.time.format.DateTimeParseException: Text '04-07-19 02:41:39.063000000 PM' could not be parsed at index 55

【问题讨论】:

  • "code throws exception.." 我们的任务是猜猜那个异常是什么?你为什么不把它放在你的问题中?
  • 您是否将 DB 上的日期存储在 varchar 或日期中?为什么要在示例中解析文本?你不能从数据库中获取`java.sql.Date`吗?
  • 我已更新问题以添加异常。我没有尝试任何其他解决方法,但我只是好奇为什么这不起作用?

标签: java datetime time


【解决方案1】:

在您的模式中,您几乎没有错误。首先padNext() 添加一个填充一个固定的宽度。在你的情况下,它应该是 28 或类似的东西。我刚刚将其替换为appendLiteral(' ')。然后HH 代表一天 24 小时的小时数,它不适用于 AM/PM。最后一件事是一年,YY 根据 JavaDoc 表示“基于周的年”(不完全确定这意味着什么) - 必须更改为 yy 才能工作。

工作模式:

    String oldDate = "04-07-19 02:41:39.063000000 PM";
    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .appendPattern("dd-MM-yy hh:mm:ss")
                .appendFraction(ChronoField.NANO_OF_SECOND, 1, 9, true)
                .appendLiteral(' ')
                .appendText(ChronoField.AMPM_OF_DAY)
                .toFormatter();

    LocalDate parseDate = LocalDate.parse(oldDate, formatter);
    System.out.println(parseDate);

【讨论】:

  • 这是对的,我正要发同样的东西
  • 谢谢你们中间人..我从早上开始就在尝试这个..从我们的回答中学到了很多东西..太棒了
猜你喜欢
  • 2017-11-30
  • 2014-10-21
  • 2018-03-28
  • 2016-02-23
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
相关资源
最近更新 更多