【问题标题】:Time for a particular object Date特定对象的时间 日期
【发布时间】:2012-08-26 17:58:54
【问题描述】:

Date 或 Calendar 类中是否有任何方法可以知道从查询到特定 Date 对象的剩余毫秒数?

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

我目前的解决办法是获取现有对象的毫秒数,减去当前的毫秒数。

有更好的解决方案吗?

谢谢!

【问题讨论】:

  • 那么,你想要两个 Date 对象之间的毫秒差吗?
  • 是的,这是一个可能的解决方案。

标签: java android date alarmmanager


【解决方案1】:

如果你想要两个Date 值相差多少毫秒,使用Date.getTime 真的很容易:

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

【讨论】:

  • 但是...是否存在类似以下的任何方法... long milis (Date objectDate) 将毫秒返回到 objectDate?
  • @HéctorOrtiz:从现在开始?不,但这是一种写自己的单行方法......只需将System.currentTimeMillis() 替换为上面的now.getTime()
【解决方案2】:

是的,只需使用日历,此类可以给您以毫秒为单位的时间(如果这是您想要的。所以在您的情况下,您可以减去两个单独的日历。顺便说一下,您可能还必须可能还需要 GregorianCalendar;

也就是说

 Calendar timeStamp = new GregorianCalendar();

希望这会有所帮助 您还可以在以下位置查看我的一个使用此功能的项目 http://be.net/HARO

参见java中的progague项目,多用于device、state device、numeric device类。

【讨论】:

    【解决方案3】:

    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 表示小时-分钟-秒-分数秒。

    例子:

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

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


    关于java.time

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

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

    要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

    从哪里获得 java.time 类?

    ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 2017-04-25
      • 1970-01-01
      相关资源
      最近更新 更多