Java 中的日期时间 - 如何查找从某个日期到 1970 年有多少毫秒?

问题描述 投票:0回答:3

我有一个简单的问题,我有日(int)、月(String)、年(int)、小时(int)、分钟(int)和秒(int)的值。我想做的是看看我的日期和 1970 年 1 月 1 日之间有多少毫秒。

举个例子,我怎么知道从 1970 年 1 月到 2011 年 6 月 1 日下午 3:12:59 有多少毫秒?

我很确定这会很简单,但我真的很累。我想我可以用

dateTime.getTimeInMillis());

但我不太确定。我不是最擅长 Java 日期的人,所以任何帮助都会很棒!

谢谢!!!!

java date time calendar
3个回答
5
投票

如果您已经有两个 Date 对象,那么只需执行以下操作:

date1.getTimeInMillis() - date2.getTimeInMillis();

如果您只有个人值,则创建日期,例如:

Calendar cal = new GregorianCalendar(year,month,dayOfMonth,hourOfDay,minute,second);
cal.getTimeInMillis();

现在你可以使用上面的公式了。

参考:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/GregorianCalendar.html http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html


4
投票

是 -

System.currentTimeMillis() - dateTime.getTimeInMillis()
,其中
dateTime
是创建的日期实例(可能从
Calendar
获得)以及您的年/月/日期/等。


0
投票

tl;博士

Duration
.between( 
    Instant.EPOCH , 
    zdt.toInstant() 
)

时区

我有日(int)、月(String)、年(int)、小时(int)、分钟(int)和秒(int)的值。

您还需要时区或相对于 UTC 的偏移量的上下文。如果没有这种背景,我们无法知道您的日期和时间是否适用于东京、图卢兹或托莱多。

java.time

在 Java 8+ 中,使用现代的 java.time 类来取代存在严重缺陷的遗留日期时间类。切勿使用

Date
Calendar
SimpleDateFormat
等。仅使用 java.time 类。

ZonedDateTime

根据您的输入,加上时区,确定时间线上的一个时刻。

ZoneId z = ZoneId.of( "America/Edmonton" ) ;
ZonedDateTime zdt = ZonedDateTime.of( y , m , d , h , m , s , nanos , z ) ;

UTC

你说:

我的日期和 1970 年 1 月 1 日之间有多少毫秒。

您忽略了 1970 年初的时区或偏移量。我猜您指的是 UTC,即与 UTC 的零时-分-秒偏移量。

Instant.EPOCH

我们为该时刻定义了一个常量:Instant.EPOCH,它代表 UTC 中 1970 年的第一个时刻,1970-01-01T00:00:00Z(其中

Z
表示零偏移量)。在内部,自该纪元引用以来,此常量对象保存零整秒和零纳秒的计数。

Duration

要以小时-分钟-秒的比例表示与时间线无关的时间跨度,请使用

Duration

Duration
的参数必须具有相同类型。因此,为了与
Instant.EPOCH
进行比较,我们需要另一个
Instant
对象。我们可以从
ZonedDateTime
中提取一个,有效地从该时区调整为 UTC。同一时刻,不同的挂钟/日历。

Duration d = Duration.between( Instant.EPOCH , zdt.toInstant() ) ;

您需要毫秒数。请注意,您的要求可能会涉及数据丢失,因为 java.time 类(例如

Instant
ZonedDateTime
)解析为更精细的纳秒。要求毫秒可能意味着放弃任何微秒和纳秒。

long millis = d.toMillis() ;
© www.soinside.com 2019 - 2024. All rights reserved.