【问题标题】:Java: how to make timestamp to display 3 digits for milliseconds all the time? [duplicate]Java:如何使时间戳始终显示 3 位毫秒? [复制]
【发布时间】:2018-08-26 06:30:06
【问题描述】:

基本上,我正在尝试使用以下方法获取系统当前时间戳,包括毫秒数

Timestamp timestamp = new Timestamp(System.currentTimeMillis()); System.out.println(timestamp);

问题是有时会显示 2018-08-26 14:17:16.94

我希望它改为显示 2018-08-26 14:17:16.940,因此毫秒内总是有 3 位数字。

我该怎么做?

非常感谢。

【问题讨论】:

  • 使用日期/时间格式化程序 - 但真正的问题是,您为什么使用 Timestamp?您需要了解Timestamp#toString 只是将它所代表的值生成一个“人类可读”的结果,通常基于当前 JVM 的配置,它并不意味着“显示”,这就是格式化程序的用途
  • java.sql.Timestamp 类在这里不合适。仅用于与数据库交换数据。从 JDBC 4.2 开始,现在被 java.time.Instant 取代。对于您所在时区的当前时刻,请使用ZonedDateTime。使用DateTimeFormatter 生成具有表示日期时间值的文本的String。这已经在 Stack Overflow 上讨论过很多很多次了。发帖前先搜索。

标签: java


【解决方案1】:

警告:此答案不使用 Timestamp,因为我不知道 OP 在真正应该使用 Java 中可用的较新日期/时间 API 时使用的是 Timestamp 8+

Java 的所有日期/时间对象都是自给定锚点时间以来经过的时间量的容器(即自 Unit epoch 以来的毫秒数)

他们的toString 实现倾向于根据JVM 当前配置的语言环境简单地提供容器的人类可读表示。这并不是真正的“显示”目的,这就是日期/时间格式化程序存在的原因。

例如...

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
System.out.println(LocalDateTime.now().format(dtf));

但我想要特定格式的日期/时间格式,以便从数据库中插入/检索

实际上,你没有。这是使用日期/时间列类型和 JDBC 日期/时间对象的数据库的重点——格式无关紧要——重要的是数据。同样,解决方案是相同的,使用“对象”来表示“数据”并使用格式化程序来“显示”它

我之前实际上尝试过你的方法,但是当我将它打印到 csv 文件时。它显示为 2018-08-26T14:42:19.514864900,与 system.out.println 的输出不同。我怎样才能减轻这种情况?

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Test {

    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");

        File file = new File("test.txt");
        try (PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file, false)))) {
            pw.print("date,");
            pw.print(LocalDateTime.now().format(dtf));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

}

这会生成一个包含...的文件

date,2018-08-26 16:55:16.032

【讨论】:

  • 我之前实际上尝试过你的方法,但是当我将它打印到 csv 文件时。它显示为2018-08-26T14:42:19.514864900,与system.out.println 的输出不同。我怎样才能减轻这种情况?
  • 如何将其打印到 CSV? LocalDateTime.now().format(dtf) 将以"yyyy-MM-dd HH:mm:ss.SSS" 的指定格式打印当前日期/时间
  • 我正在使用fw = new FileWriter(f,false);bw = new BufferedWriter(fw);out = new PrintWriter(bw);out.print(LocalDateTime.now().format(dtf))
  • 好吧,基于此,它应该可以工作。考虑提供runnable example which demonstrates your problem。由于您正在写入 CSV 文件,因此您还应该考虑使用适当的库,这比在您的值之间放置一个 , 更复杂
猜你喜欢
  • 2015-09-22
  • 2021-11-20
  • 2015-04-17
  • 2011-09-06
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2015-09-01
相关资源
最近更新 更多