【问题标题】:How to convert 2019-03-26T04:31:40-05:00 like string into timestamp in Java?如何将 2019-03-26T04:31:40-05:00 之类的字符串转换为 Java 中的时间戳?
【发布时间】:2019-03-26 13:55:48
【问题描述】:

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

【问题讨论】:

  • java.sql.Date 在那里做什么?
  • 您不应将日期/时间值作为字符串存储在数据库中,使用正确的类型(TIMESTAMP WITH TIME ZONE)并使用java.time.OffsetDateTime 使用符合 JDBC 4.2(或更高版本)的方式存储它司机。
  • 你说你想以纳秒的精度存储日期,但如果你收到的数据是以秒为单位的,那又有什么意义呢?超过整秒的任何精度都会被弥补?
  • 相关:Converting ISO 8601-compliant String to java.util.Date(使用麻烦且过时的SimpleDateFormat 类忽略许多答案)。

标签: java date date-format java-time


【解决方案1】:

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

【讨论】:

  • 这也只给出了日期。我的输入是这个 - 2019-03-26T04:31:40-05:00,我期望的输出是这个 26-MAR-19 04.31.40.121000000 AM
  • @mashkurm 我编辑了我的答案,你可以试试那个解决方案,对不起,我没有测试它(使用电话回答?)
  • 它可以工作并产生26-Mar-2019 04.31.40.00000 AM。要获得更多秒的小数,只需在格式模式中添加更多大写 S
  • 谢谢@Ole V.V.为了为我测试它,我想知道在格式中添加 9 次 S 是否是个好主意,你不认为它有点难看,也许 OP 不想要所有这些细节?
  • 我们可以让 OP 决定。他最清楚自己想要什么。
【解决方案2】:

不要定义自己的格式化程序。使用内置的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 实现,然后让它处理其余的事情。

【讨论】:

  • -5.00 是时间戳,表示时区。我需要像 25-MAR-19 01.23.42.121000000 AM 这样的格式,而不仅仅是日期。
猜你喜欢
  • 2019-09-27
  • 1970-01-01
  • 2019-08-14
  • 2019-10-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多