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