DateFormat df1 = new SimpleDateFormat("kk:mm");
Date d = null;
try {
d = df1.parse("21:00");
} catch (ParseException e) {
e.printStackTrace();
}
我得到61200000毫秒但是当我在线转换它时,我得到了不同的值。
答案 0 :(得分:1)
SimpleDateFormat
并不像名称所暗示的那么简单。特别是它对时区的处理有时模糊不清。在这种情况下,我敢说它使用你的JVM的时区设置(可能从你的计算机的设置中取代),显然是一个与UTC相差4小时的设置。因此,当您的时区中的时间是21:00(晚上9点)时,它是UTC的17:00。 Date
对象中的毫秒值始终为UTC,因此您得到17 * 60 * 60 * 1000 = 61 200 000.如果您在不同时区的服务器上在线尝试,您可能会得到不同的结果。
java.time.Duration
我认为你真正想要的是Duration.parse("PT21H0M")
。这将给你21小时0分钟的持续时间。您可以使用其toMillis
方法获得21 * 60 * 60 * 1000 = 75 600 000.
Java 8的日期和时间类(其中Duration
只是一个)通常比旧类更愉快。
或者你可以pass a number of hours。
Duration d = Duration.ofHours( 21 );
语法PT21H0M
起初可能看起来有点奇怪,但它是一个国际标准,ISO 8601,所以我们可能更好地学会使用它,而且它很容易学习。
答案 1 :(得分:-1)
如果你这样做:
d = df1.parse("21:00");
你得到这个日期
Thu Jan 01 21:00:00 CET 1970
和纪元是72000000,要转换那个,你需要除以1000
可验证的here