Java有朴素的时间戳吗?

Java有朴素的时间戳吗?,java,java-8,timezone,timestamp,Java,Java 8,Timezone,Timestamp,正如我们在java中的long timestamp中所指出的,Unix时间戳意味着: long ts = 1362156863140L 但是Java中是否有朴素的时间戳?或者将构造函数中的长时间戳视为不知道时区的类?自1.8以来,Java有一个日期/时间API,包含您可能需要的所有本机日期和时间函数 请查看下面的URL以了解介绍和许多示例: 自1.8以来,Java有一个日期/时间API,包含您可能需要的所有本机日期和时间函数 请查看下面的URL以了解介绍和许多示例: 您使用的术语很有趣。大多数

正如我们在java中的long timestamp中所指出的,Unix时间戳意味着:

long ts = 1362156863140L

但是Java中是否有朴素的时间戳?或者将构造函数中的长时间戳视为不知道时区的类?

自1.8以来,Java有一个日期/时间API,包含您可能需要的所有本机日期和时间函数

请查看下面的URL以了解介绍和许多示例:

自1.8以来,Java有一个日期/时间API,包含您可能需要的所有本机日期和时间函数

请查看下面的URL以了解介绍和许多示例:
您使用的术语很有趣。大多数定义中的“时间戳”都是唯一的时间点,因此必须与UTC相关——要么完全基于UTC,要么与UTC有固定的偏移量。因此,“天真的时间戳”多少有些矛盾

然而,确实有一个类表示没有时区的日期和时间,这就是。它是作为JSR-310与Java8一起引入的
java.time
API的一部分


可以使用从数字时间戳创建一个时间戳。如果时间戳是基于毫秒的,那么可以进行一些除法和模运算,将其拆分为单独的秒和纳秒参数。您还需要将UTC偏移量传递给它,以便它知道您希望如何解释传入值。

您使用的术语很有趣。大多数定义中的“时间戳”都是唯一的时间点,因此必须与UTC相关——要么完全基于UTC,要么与UTC有固定的偏移量。因此,“天真的时间戳”多少有些矛盾

然而,确实有一个类表示没有时区的日期和时间,这就是。它是作为JSR-310与Java8一起引入的
java.time
API的一部分

可以使用从数字时间戳创建一个时间戳。如果时间戳是基于毫秒的,那么可以进行一些除法和模运算,将其拆分为单独的秒和纳秒参数。您还需要向它传递UTC偏移量,以便它知道您希望如何解释传入值。

tl;博士 你使用的术语相互矛盾根据定义,时间戳需要时区或UTC的偏移量。

了解以下两者之间的区别:

  • 时间线上的点(参考时区或UTC的偏移)
  • 与时间线无关的日期/时间(缺少区域/偏移的概念)
每个人都有一个目标,但只有第一个目标代表一个特定的时刻。“一词”是指第一个而不是第二个

Instant
Java中有…时间戳吗

是,
Instant
是一个时间戳。 该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)

如果从1970-01-01T00:00:00Z的历元参考日期开始计算毫秒数,则将其解析为
Instant
。末尾的
Z
表示UTC,发音为“Zulu”

long millisSinceEpoch = 1_362_156_863_140L ;
Instant instant = Instant.ofEpochMilli( millisSinceEpoch );
2013-03-01T16:54:23.140Z

时区是必要的 类,该类将构造函数中的长时间戳视为不知道时区

您使用的术语是矛盾的。时间戳,如果您指的是时间线上的一个点,历史上的一个特定时刻,必然涉及时区或UTC的偏移量。根据定义,时间戳不能不知道时区。

通常在日期-时间处理中,我们使用UTC作为跟踪时间的基线。格林威治历史中的这条线通常被用作定义新日期的任意选择

至于1970-01-01T00:00:00Z,这只是信息技术行业中使用的一个或多个时代参考

如果没有时区或UTC的偏移量,我们就缺少一个可以赋予日期和时间意义的上下文。例如,“下周五中午”在印度可能意味着下午12点,在法国可能意味着下午12点,每个时间间隔几个小时。另一个例子是,突尼斯午夜后几分钟是新的一天,而魁北克仍然是“昨天”

如果我们指定一个时区,例如“下周五中午在太平洋/奥克兰”,那么我们将指定一个特定的时刻,即时间线上的一个点

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
LocalDate todayAuckland = LocalDate.now( z ) ;  // Need time zone to determine today’s date.
LocalDate sameOrNextFriday = todayAuckland.with( TemporalAdjusters.next( DayOfWeek.FRIDAY ) ;
LocalTime timeOfDay = LocalTime.of( 12 , 0 ) ;  
ZonedDateTime noonNextFridayAuckland = ZonedDateTime.of( sameOrNextFriday , timeOfDay , z ) ;  // Determines a specific moment on the timeline.
Instant noonNextFridayAucklandViewedAsUtc = noonNextFridayAuckland.toInstant() ;  // Same moment, same point on the timeline, but viewed with wall-clock time of UTC. 
未分区 Java中是否有朴素的时间戳

如果“天真”是指故意缺少或概念的日期时间,是的:。但不要将此值称为“时间戳”

Java中的所有三个
Local…
类都故意缺少区域/偏移

我有种失落的感觉,你相信你可以通过忽略时区和UTC偏移量的问题来简化编程。你不能。你将玩一个“现在付款,或者以后付款”的冒险游戏

虽然您确实可以对只有您家乡用户的应用程序使用
本地…
类型,但一旦您的软件必须处理该狭隘范围之外的任何情况,您就会遇到灾难。如果您需要与其他城镇的人通信约会,或将日志条目与远程服务器进行比较,或与其他softwar进行通信e系统,你将有一个丑陋的混乱处理你的手

那么为什么java.time包含
LocalDateTime
LocalDate
LocalTime
?应该在什么时候使用这些类?三种情况:

  • 区域或偏移量未知
    这是错误的。这是错误的数据。类似于在不知道货币的情况下拥有价格/成本
  • 的意图是“无处不在”,就像在每个时区一样。
    例如,一项公司政策规定“我们所有的工厂都将在12:30休息吃午饭”,这意味着德里的工厂将比杜塞尔多夫的工厂早几个小时休息,杜塞尔多夫的工厂比底特律的工厂早几个小时休息
  • 我们计划在未来的某个特定时刻,但我们害怕政客重新定义时区
    ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
    LocalDate todayAuckland = LocalDate.now( z ) ;  // Need time zone to determine today’s date.
    LocalDate sameOrNextFriday = todayAuckland.with( TemporalAdjusters.next( DayOfWeek.FRIDAY ) ;
    LocalTime timeOfDay = LocalTime.of( 12 , 0 ) ;  
    ZonedDateTime noonNextFridayAuckland = ZonedDateTime.of( sameOrNextFriday , timeOfDay , z ) ;  // Determines a specific moment on the timeline.
    Instant noonNextFridayAucklandViewedAsUtc = noonNextFridayAuckland.toInstant() ;  // Same moment, same point on the timeline, but viewed with wall-clock time of UTC.