如何将2019-03-26T04:31:40-05:00 like string转换成Java中的timestamp?

How to convert 2019-03-26T04:31:40-05:00 like string into timestamp in Java?

我想更改从服务器获取的时间并使用以下格式保存到数据库中 - “25-MAR-19 01.23.42.121000000 AM”

我如何使用 Java 做到这一点?

尝试了以下没有帮助的代码

import java.sql.Date;
import java.time;
public class MyClass {
    public static void main(String args[]) {
        final String selectedStart = "2019-03-26T04:31:40-05:00";
        final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss-XXX'");
        final LocalDate parsedDate = LocalDate.parse(selectedStart, formatter);
    }
}

不要定义你自己的格式化程序。使用内置 DateTimeFormatter.ISO_OFFSET_DATE_TIME.

    final String selectedStart = "2019-03-26T04:31:40-05:00";
    final LocalDate parsedDate = LocalDate.parse(selectedStart, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    System.out.println(parsedDate);

2019-03-26

你的代码出了什么问题?

您的格式模式字符串中有两个字符错误:

  1. 偏移量是 -05:00,减号是它的一部分(它可能是 + 而不是正 UTC 偏移量)。所以从你的格式模式中删除它。
  2. 单引号(撇号)可能会围绕文字部分设置,正如您在 'T' 中所做的那样。您不能在格式模式字符串的末尾使用不匹配的单引号。把那个也删掉。

更多提示

  • LocalDate 当您想将日期 和一天中的时间 存储到数据库中时,使用 class 是错误的。 LocalDate 保存没有时间的日期。你可能想要 OffsetDateTime.
  • 存储到你的数据库时不要关心格式。只需将日期时间对象(例如您的 OffsetDateTime)交给您的 JDBC 驱动程序或 JPA 实现,让它处理其余的事情。

我不完全理解你的问题,但如果你只想要日期部分,你可以使用 Ole.V.V 答案或只使用:

LocalDate d = LocalDate.parse(selectedStart.split("T")[0]);

编辑

OffsetDateTime odt = OffsetDateTime.parse(selectedStart);
String str = odt.format(DateTimeFormatter.ofPattern("dd-MMM-uuuu hh.mm.ss.SSSSS a"));