getTimeinMillis返回负值

时间:2016-05-06 14:41:26

标签: java android time

我正在创建一个可以显示某个日期剩余时间的应用程序,以及某个日期之后经过的时间。但我忍受了一些困难,日期不到1970年,大于3300.我找到了解释为什么会发生。

  

问题是来自getTimeInMillis的这句话:   从纪元开始的当前时间为UTC毫秒。   而且,据我所知,这个时代始于1970年1月1日,在此之前你会得到一个负数。

我的问题是如何解决这个问题。 (是的,我听说过JodaTime,我不允许在这个应用程序中使用这个库。)

我应该使用哪些默认(标准)工具?

这是一段无法正常运行的代码。

private void getDateTime()
{
    Date date = new Date();

    timeRemaining = Calendar.getInstance();
    date.setTime(timeRemaining.getTimeInMillis());

    millis = Math.abs(timeRemaining.getTimeInMillis() - targetDate.getTimeInMillis());

    int scnds = (int) (millis / 1000) % 60 ;
    int mnts = (int) ((millis / (1000 * 60)) % 60);
    int hrs = (int) ((millis / (1000 * 60 * 60)) % 24);
    int dys = (int) (millis / (1000 * 60 * 60 * 24));

    resultDate.setText(getString(R.string.formating, dys, hrs, mnts, scnds));
}

1 个答案:

答案 0 :(得分:0)

您可以通过利用Java 8中引入的DurationLocalDateTime类来实现这一目标-

import java.time.Duration;
import java.time.LocalDateTime;

class Main {
  public static void main(String[] args) {
    LocalDateTime fromDateTime = LocalDateTime.of(1914, 9, 10, 0, 0, 0);
    LocalDateTime toDateTime = LocalDateTime.of(2014, 12, 16, 0, 0, 0);
    System.out.println(Duration.between(fromDateTime, toDateTime).toMillis());
  }
}