【问题标题】:How to format a date without losing any microsecond如何在不丢失任何微秒的情况下格式化日期
【发布时间】:2023-01-11 19:13:24
【问题描述】:

早上好。你知道这种日期的格式而不丢失最后 3 个数字吗?

"2022-09-23-11.25.52.660135"

我尝试使用此格式化程序

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SS")

但我输掉了“135”,得到了2022-09-23-11.25.52.660

我也尝试了其他组合,但我仍然无法获得完整的日期。

【问题讨论】:

标签: java date time format formatter


【解决方案1】:

不仅我不知道任何这样的格式,而且不存在这样的格式,因为:

  • 可用格式已详尽列出in the documentation of the class,但该列表中未包含此类格式。如果有人知道某种格式即使没有列出也能神奇地工作,你不应该使用它,因为这会构成神圣启示的文件魔术编程.

  • SimpleDateFormatDateFormat 都是为与Date 一起工作而构建的,by its documentation 被定义为具有毫秒精度。因此,无法格式化微秒,因为Date 没有微秒。

鉴于以上所述,您关于“失去“135””的说法令人怀疑:是什么让您相信您首先拥有 135?想一想,您完全没有解释一些非常重要的事情:您是要打印日期还是要解析日期?如果你试图解析一个日期,那么是什么让你相信你可以在一个日期中拥有 135?这就是为什么在 StackOverflow 上展示你的代码总是非常重要的.

回答“你是怎么做的”部分:

  • 如果你真的喜欢SimpleDateFormat,你可以用它来输出不带微秒的时间坐标,然后附加一个'.'。到它,然后自己将微秒转换为字符串,用零填充。

  • 但是,如果您正在使用 Instant,那么您应该使用 DateTimeFormatter 类,它提供了一个格式说明符,用于描述精度大于毫秒的秒数。

【讨论】:

    【解决方案2】:

    在 Java 编程语言中,java.util.Date 类代表一个特定的时间点,精度为毫秒。 Date 类还提供格式化和解析日期字符串的方法,包括微秒的表示。

    SimpleDateFormat 类用于格式化和解析 Java 中的日期字符串。该类提供一组格式设置模式,可用于表示日期和时间值的不同部分。

    要以日期格式表示最后 3 位微秒,您可以在格式字符串中使用模式 SSS。 S 字符用于表示毫秒,模式中 S 字符的数量决定了要包含在输出中的毫秒值的位数。所以 SSS 将包括微秒的最后 3 位数字。

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

    String formattedDate = format.format(new Date());

    您还可以使用 SSSSSS 来表示 6 位微秒。

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");

    String formattedDate = format.format(new Date());

    值得注意的是,Date 类不存储有关微秒的信息,它只存储以毫秒为单位的时间,这意味着微秒表示仅用于格式化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2017-01-01
      相关资源
      最近更新 更多