gpt4 book ai didi

java - SimpleDateFormat 是否有格式字符串来获取毫秒日期时间值而不是人类可读的形式?

转载 作者:行者123 更新时间:2023-12-02 01:08:37 28 4
gpt4 key购买 nike

通过像 SimpleDateFormat 这样的类,可以以合适的格式设置时间和日期的格式。

这里有示例

https://developer.android.com/reference/java/text/SimpleDateFormat#examples

在 Java 中,它以毫秒值开始,然后该值被转换为人类可读的格式。

有时,使用该值而不是人类可读的形式会很有用。

示例:

如果我没记错的话,1578738100000 值仅表示 UTC 值 2020 年 1 月 11 日星期六 10:21:40。

是否可以有一个格式字符串来生成带有毫秒的字符串而不是人类可读的形式?

我知道可以直接从 Date 类获取毫秒值,但我在这里问的是毫秒是否是用于提供 SimpleDateFormat (或类似类)的可能格式字符串之一。

最佳答案

清楚地理解日期时间值对象和格式化程序对象扮演着不同的角色。

  • 日期时间对象没有格式,它表示日期和/或时间,带有或不带有时区上下文或相对于 UTC 的偏移量。
  • 格式化程序没有值、日期或时间。格式化程序的工作是使用日期时间对象来生成代表该日期时间对象值的特定格式的文本。

因此,跟踪自纪元引用以来的毫秒数是日期时间对象的工作,而不是格式化程序的工作。生成人类可读的文本是格式化程序的工作。所以,不,格式化程序不会产生毫秒计数。

并且,不,您不应该使用毫秒计数来传达日期时间值。这些数字对于人类读者来说没有任何意义,这会导致很容易丢失错误数据。而且这些数据不容易识别自己——它是整秒、毫秒、微秒还是纳秒的数字?纪元引用日期是多少,couple dozen commonly used epochs 中的哪个?

而是使用 ISO 8601 标准格式以文本形式传达日期时间值。

另一个问题:您正在使用糟糕的日期时间类,这些类在几年前就被 JSR 310 中定义的现代 java.time 类所取代。

如果您的数字是自 UTC 1970 年第一个时刻的纪元引用以来的毫秒数,请解析为Instant

Instant instant = Instant.ofEpochMilli( 1_578_738_100_000L ) ;

如果您违背我的建议坚持使用纪元计数,您可以询问Instant

long milliseconds = instant.toEpochMilli() ;

生成标准 ISO 8601 格式的文本。

String output = instant.toString() ;

对于其他格式,请将 Instant 调整为 OffsetDateTimeZonedDateTime 对象,并使用 DateTimeFormatter 生成文本>。所有这些已经被讨论过很多次了。因此,请搜索 Stack Overflow 以了解更多信息。

instant
.atZone(
ZoneId.of( "America/Montreal" )
)
.format(
DateTimeFormatter
.ofLocalizedDateTime( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
)

最后,请注意,虽然旧类的分辨率仅限于毫秒,但 java.time 类的精度却更高。因此,在调用 Instant::toEpochMilli 时请注意可能的数据丢失,因为任何微秒或纳秒都会被忽略,

关于java - SimpleDateFormat 是否有格式字符串来获取毫秒日期时间值而不是人类可读的形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59693308/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com