我做了以下事情:
String standardRange = "00:01:01";
SimpleDateFormat rangeFormatter = new SimpleDateFormat("hh:mm:ss");
Date range = rangeFormatter.parse(standardRange);
现在:
range.getTime();
..我的输出为-3539000而不是61,000
我不确定我做错了什么;在调试时,cdate
存在,该属性包含fraction
,其中包含值61,000,这就是我想要的。
答案 0 :(得分:3)
你看到这个的原因是你创建的日期实际上是在日期时代的过去,而不是在它之后1m1s:
String standartRange = "00:01:01";
SimpleDateFormat rangeFormatter = new SimpleDateFormat("hh:mm:ss");
Date range = rangeFormatter.parse(standartRange);
System.out.println(new Date(0L));
System.out.println(new Date(0L).getTime());
System.out.println(range);
System.out.println(range.getTime());
及其输出;
Thu Jan 01 01:00:00 GMT 1970
0
Thu Jan 01 00:01:01 GMT 1970
-3539000
这里的纪元日期不正确 - 它应该是00:00:00,但由于historical bug BST / GMT更改了日期和时区无法跟踪。似乎Sun / Oracle认为这是一个历史性的“不准确”。
查看错误报告 - 它更全面地描述了问题。
根据您的语言(德语),这可能不是由于此BST问题直接导致的,但它几乎肯定是相关的。
答案 1 :(得分:1)
Java Date不是为计算给定时间段的持续时间而设计的。 getTime()调用返回自1970年1月1日00:00:00 GMT以来的毫秒数。在你的情况下,你实际上最终会得到一个在该纪元之前的日期(因此是负数)。当我运行你的代码时,我得到了21661000.(请参阅Sean Landsman的回答,因为我相信他已经找到了为什么会得到负面结果...提示:我的号码正好是格林尼治标准时间的6小时或21600000毫秒)< / p>
Joda-Time是一个非常适合解决您的潜在问题的库。
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendHours()
.appendSeparator(":")
.appendMinutes()
.appendSeparator(":")
.appendSeconds()
.toFormatter();
Period period = formatter.parsePeriod("00:01:01");
assert period.toStandardDuration().getMillis() == 61000
答案 2 :(得分:0)
为了得到你想要的东西,你应该比较你想要的时间和时间的来源。使用以下代码:
String standardRange = "00:01:01";
SimpleDateFormat rangeFormatter = new SimpleDateFormat("HH:mm:ss");
Date range = rangeFormatter.parse(standardRange);
Date range2 = rangeFormatter.parse("00:00:00");
System.out.println(range.getTime() - range2.getTime());
答案 3 :(得分:0)
根据JavaDoc,getTime()
:
返回自此Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数。
您需要一分钟和一秒钟内的毫秒数。
(60*minutes+seconds)*1000
它实际上不需要来自Date
对象。
如果您需要计算某个时间间隔的时间(以毫秒为单位),可以使用joda time库,或者从日期对象中获取日,小时,分钟,秒和毫秒组件并手动计算值
答案 4 :(得分:0)
尝试:
Date range1 = rangeFormatter.parse("00:01:01");
Date range2 = rangeFormatter.parse("00:00:00");
System.out.println(range1.getTime() - range2.getTime());
答案 5 :(得分:0)
hh:mm:ss
代表12小时的时间,它总是代表“时间点”,而不是“时间间隔”。所以,时区肯定会影响价值。但是,在GMT +0中,该值等于表示“时间间隔”。
您只需要:
rangeFormatter.setTimeZone(TimeZone.getTimeZone("GMT"));
试试吧!