我做了以下工作:
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,这正是我想要的。
发布于 2013-03-01 23:59:01
出现这种情况的原因是,您创建的日期实际上是日期纪元的过去,而不是它之后的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。Sun/Oracle似乎认为这是历史上的“不准确”。
查看bug报告-它更全面地描述了问题。
从你的语言(德语)来看,这可能不是由于这个BST问题直接造成的,但几乎可以肯定是相关的。
发布于 2013-03-02 01:32:10
Java Date不是用来计算给定时间段的持续时间的。getTime()调用返回自1970年1月1日00:00:00GMT以来的毫秒数。在您的例子中,您实际上得到了一个在该纪元之前的日期(因此是负数)。当我运行你的代码时,我得到了21661000。(请看Sean Landsman的回答,因为我相信他已经找到了为什么你会得到负面results...hint的原因:我的号码恰好比格林尼治标准时间低6小时或21600000ms)
Joda-Time是一个非常适合解决底层问题的库。
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendHours()
.appendSeparator(":")
.appendMinutes()
.appendSeparator(":")
.appendSeconds()
.toFormatter();
Period period = formatter.parsePeriod("00:01:01");
assert period.toStandardDuration().getMillis() == 61000发布于 2013-03-02 00:01:10
为了得到你想要的,你应该在你想要的时间和时间的起点之间进行比较。使用以下代码:
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());https://stackoverflow.com/questions/15161510
复制相似问题