特定对象的时间日期

时间:2012-08-26 17:58:54

标签: java android date alarmmanager

是否有任何方法使用Date或Calendar类来了解从查询时间到特定Date对象的剩余毫秒数?

我正在使用Alarmmanager重新安排闹钟,对我来说非常重要。

我目前所拥有的解决方案是获取现有对象的毫秒数,并扣除当前的毫秒数。

有更好的解决方案吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

如果您想要两个Date值相差多少毫秒,那么使用Date.getTime非常容易:

long millisLeft = target.getTime() - now.getTime();

答案 1 :(得分:0)

是的,只需使用Calenda,这个课程可以给你几分钟的时间(如果这是你想要的。所以在你的情况下,你可以减去两个单独的Calanders。顺便你也可能必须喜欢也需要GregorianCalendar;

即那是

 Calendar timeStamp = new GregorianCalendar();
希望这会有所帮助 你也可以看到我的一个项目使用它 http://be.net/HARO

参见java中的progague项目,主要用于设备,状态设备,数值设备类。

答案 2 :(得分:0)

TL;博士

ChronoUnit.MILLISECONDS.between(       // This enum object offers a method for calculated elapsed time in a particular granularity.
    myJavaUtilDateStart.toInstant() ,  // Convert from legacy class (`java.util.Date`) to modern class (`java.time.Instant`).
    myJavaUtilDateStop.toInstant()
)                                      // Returns a long integer.

java.time

现代方法使用 java.time 类。

Instant

Instant类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。此课程取代java.util.Datejava.sql.Timestamp

Instant instant = Instant.now() ;  // Capture current moment in UTC in up to nanosecond resolution.

ChronoUnit.MILLISECONDS

要将经过时间计算为具体的毫秒数,请使用ChronoUnit.MILLISECONDS枚举对象。请注意数据丢失,因为Instant对象中的任何微秒或纳秒都将被忽略。

long millisElapsed = ChronoUnit.MILLISECONDS.between( startInstant , stopInstant ) ;

Duration

Java提供了几个类来表示未附加到时间轴的时间跨度:

  • Period几年 - 几天 -
  • Duration for hours-minutes-seconds-fractionalSecond。

示例:

Duration d = Duration.between( startInstant , stopInstant ) ;

通过调用Duration::toString生成标准ISO 8601格式的字符串。

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore