java - date.getTime() 比 System.getCurrentTimeMillis() 短

标签 java date time

我正在尝试创建一个简单的闹钟,但我偶然发现了一个我似乎无法解决的问题。我试图将一个字符串解析为一个日期,这样我就可以获得当前时间和触发警报的时间之间的差异。

这是我解析时间的代码:

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
sdf.setTimeZone(getTimezone());

Date date = sdf.parse(args[0]);

这是我的 getTimezone() 方法:

public static TimeZone getTimezone() {
    Calendar cal = Calendar.getInstance();
    long milliDiff = cal.get(Calendar.ZONE_OFFSET);

    String [] ids = TimeZone.getAvailableIDs();
    String name = null;
    for (String id : ids) {
      TimeZone tz = TimeZone.getTimeZone(id);
      if (tz.getRawOffset() == milliDiff) {
        // Found a match.
        name = id;
        break;
      }
    }
    return TimeZone.getTimeZone(name);
}

这是我找出差异的代码:

long diff = date.getTime() - System.currentTimeMillis();

所以我的问题是 date.getTime() 返回 79680000,而 System.currentTimeMillis() 返回 1473538047978(这当然每次都不同,但出于某些奇怪的原因,date.getTime() 不是)。

这意味着我在尝试找出差异时得到一个负数,因此我无法使用它。

编辑:经过一些调试,我意识到这与未设置年、月和日有关,但我不知道如何获得这些。

最佳答案

您注意到 date.getTime() 返回 79680000,即 1970 年 1 月 1 日 后 22 小时 20 分钟。问题是(正如您所注意到的)您没有解析年、月和日。

你可以这样做:

SimpleDateFormat sdf = new SimpleDateFormat("DD/MM/YYYY hh:mm:ss"); 

示例输入 20/04/2016 20:20:0 返回时间为 Mon Jan 04 20:20:00 CET 2016(不要看时区). 1970 年 1 月 1 日后为 1451935200000 毫秒。

注意:更改字符串以符合您的格式要求(语法不言自明)。

关于java - date.getTime() 比 System.getCurrentTimeMillis() 短,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39430172/

相关文章:

java - 将 Java NIO 与 IO 输入流读取操作混合

java - 如何在 Ubuntu 中管理不同版本的 Java

javascript - 获取上一年的开始月份/日期和结束月份/日期

java - 比较 epoch 毫秒和 LocalDateTime 之间的 java 时间

python - 如何在 Pandas 中显示正确的日期世纪?

javascript - 如何在 JavaScript 中重新格式化时间?

MySQL 日期时区输入

java - 在Java中,如何动态确定数组的类型?

java - JDBC getDouble 返回 0.0

javascript - Node.js - 设置系统日期/时间