如何在Java中将2019-03-26T04:31:40-05:00像字符串那样转换为时间戳?

时间:2019-03-26 13:55:48

标签: java date date-format java-time

我想更改从服务器获取的时间并使用以下格式保存到数据库中:“ 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);
    }
}

2 个答案:

答案 0 :(得分:3)

不要定义自己的格式化程序。使用内置的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是要在数据库中存储日期和一天中的时间时使用的错误类。 LocalDate保存的日期中没有一天中的时间。您可能需要OffsetDateTime
  • 在存储到数据库中时不需要关心格式。只需将datetime对象(例如您的OffsetDateTime)交给JDBC驱动程序或JPA实现,并让它负责其余的工作。

答案 1 :(得分:3)

我不是完全理解您的问题,但是如果您只想要日期部分,则可以使用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"));