【问题标题】:How do I convert String to Instant concatenating a date string to a time string?如何将字符串转换为即时将日期字符串连接到时间字符串?
【发布时间】:2022-02-08 01:15:45
【问题描述】:

我需要将此字符串转换为 Instant,我是这样做的:

String inputStartDate = startDate+" 00:00:00.000";
String inputEndDate = endDate+" 23:59:59.999";

startDate 只是日期,因为我从另一个调用中获取了字符串,但我需要保持小时不变,与 endDate 相同。

然后,我像这样转换为 Instant:

Instant newStarDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(inputStartDate).toInstant();
Instant newEndDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(inputEndDate).toInstant();

但是当我转换为即时时,它转换错误。 例如:

startDate="2022-02-04"
endDate="2022-02-04"

当我做 concat 时,字符串是这样的:

inputStartDate: "2022-02-03 00:00:00.000"
inputEndDate: "2022-02-04 23:59:59.999"

而我变身瞬间的结果是这样的,不知道哪里出了问题。

newStartDate:"2022-02-03T03:00:00Z"
newEndDate:"2022-02-05T02:59:59.999Z"

我需要 yyyy-MM-dd HH:mm:ss.SSS 来执行 mongodb 查询,并且它需要是 Instant。

【问题讨论】:

  • SimpleDateFormat 只返回一个简单的日期。
  • 你有一个学习曲线在你面前。处理日期、时间和时区是一个复杂的主题,不容易掌握。你需要熟悉java.time.*中的类
  • 不要使用23:59:59.999 来代表一天的结束。您在一天中遗漏了 999 999 纳秒。使用第二天的第一刻,并认为它是独一无二的。

标签: java datetime time simpledateformat


【解决方案1】:

我得到了答案,这比我想象的要容易。

您必须像这样直接将其转换为 Instant,而不是给它一个 SimpleDateFormat:

Instant finalStartDate = Instant.parse(startDate+"T00:00:00.000Z");
Instant finalEndDate = Instant.parse(endDate+"T23:59:59.999Z");

您必须添加 T 和 Z。

【讨论】:

    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多