LocalDateTime删除毫秒

Nit*_*wad 42 java database date java-8

我在Java应用程序中工作,我正在使用Java 8.

我已经集成了数据库(多个数据库Oracle,Mysql,Postgres)以及DB i中创建日期的字符串.

DB中的日期格式为 - 2015-07-29 16:23:28.143

我从DB获取此文件并在Localdatetime对象中设置

myObj.setCreated(rs.getTimestamp("created").toLocalDateTime());
Run Code Online (Sandbox Code Playgroud)

所以这里的问题是我不想在响应中显示/发送毫秒.我想显示/发送日期,如2015-07-29 16:23:28

我尝试了格式化程序,但它失败了,因为它给了字符串,我不想将LocalDateTime对象更改为String,因为这会导致所有Java应用程序发生重大变化.所以想找到解决方案

任何人都可以知道任何解决方案.

Pet*_*rey 72

您可以尝试这样做以减少任何小于秒

ldt = ldt.truncatedTo(ChronoUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

  • 这应该是正确的答案. (4认同)
  • 比起所选的答案,我更喜欢这个。意图更明确 (4认同)
  • 也适用于“即时” (3认同)
  • 当比较在测试中创建的 LocalDateTime 然后用于与数据库中将毫秒四舍五入到最接近的秒的值进行比较时,这个答案对我来说效果很好。 (2认同)

Mar*_*vin 59

只需将它们设置为0:

myObj.setCreated(rs.getTimestamp("created").toLocalDateTime().withNano(0));

采样/证据:

import java.time.LocalDateTime;

public class DateTimeSample {

  public static void main(String[] args) {
    LocalDateTime ldt = LocalDateTime.now();
    System.out.println(ldt);
    System.out.println(ldt.withNano(0));
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

2015-07-30T16:29:11.684
2015-07-30T16:29:11
Run Code Online (Sandbox Code Playgroud)

  • 有一个小通知。确保您不需要几秒钟。如果您的 LocalDateTime 2015-07-30T16:29:00.684 有 00 秒,并且您使用Nano(0) 或 truncatedTo(ChronoUnit.SECONDS) 进行剪切,您将得到 2015-07-30T16:29 。有时这不是您期望的结果。 (2认同)

Adi*_*ari 8

为 STRING 的工作人员提供代码和日志以Happy Family在答案中发表评论,Marvin

!!! 我也陷入了同样的陷阱!

问题

withNano(0)truncatedTo(ChronoUnit.SECONDS)如果秒数是这样的话,也会删除秒数(:00在时钟上,秒针位于 12 点)

进一步扩展 Marvin 的示例输出

2015-07-30T16:29:11.684
2015-07-30T16:29:11
2015-07-30T16:31 // for actual time 2015-07-30T16:31:00.684
2015-07-30T16:31 // for actual time 2015-07-30T16:31:00.888
Run Code Online (Sandbox Code Playgroud)

以上行为可能导致BUG:

当您消除纳秒时,如果秒出现为:00,则它们会跳过打印

解决:

public class WithNanoTest {
    public static void main(String[] args) throws InterruptedException {
        while (true) {
            Thread.sleep(500);

            DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
            System.out.println("truncate :::: " + LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS).format(dtf));
            System.out.println("withNano :::: " + LocalDateTime.now().withNano(0).format(dtf));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

日志截图

使用 DateFormatter 记录日志

使用 DateFormatter 记录日志

没有 DateFormatter 的日志(仅使用truncatewithNano(0)

观察这里缺少的秒数!

没有 DateFormatter 的日志