我有一个简单的问题,我有日(int)、月(String)、年(int)、小时(int)、分钟(int)和秒(int)的值。我想做的是看看我的日期和 1970 年 1 月 1 日之间有多少毫秒。
举个例子,我怎么知道从 1970 年 1 月到 2011 年 6 月 1 日下午 3:12:59 有多少毫秒?
我很确定这会很简单,但我真的很累。我想我可以用
dateTime.getTimeInMillis());
但我不太确定。我不是最擅长 Java 日期的人,所以任何帮助都会很棒!
谢谢!!!!
如果您已经有两个 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
是 -
System.currentTimeMillis() - dateTime.getTimeInMillis()
,其中 dateTime
是创建的日期实例(可能从 Calendar
获得)以及您的年/月/日期/等。
Duration
.between(
Instant.EPOCH ,
zdt.toInstant()
)
我有日(int)、月(String)、年(int)、小时(int)、分钟(int)和秒(int)的值。
您还需要时区或相对于 UTC 的偏移量的上下文。如果没有这种背景,我们无法知道您的日期和时间是否适用于东京、图卢兹或托莱多。
在 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 ) ;
你说:
我的日期和 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() ;