首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.util.Date获取毫秒

java.util.Date获取毫秒
EN

Stack Overflow用户
提问于 2013-03-01 23:44:15
回答 6查看 19.3K关注 0票数 7

我做了以下工作:

代码语言:javascript
复制
String standardRange = "00:01:01";
SimpleDateFormat rangeFormatter = new SimpleDateFormat("hh:mm:ss");
Date range = rangeFormatter.parse(standardRange);

现在:

代码语言:javascript
复制
range.getTime();

。。我得到的输出是-3539000,而不是61,000

我不确定我做错了什么;在调试时,cdate存在,该属性包含一个fraction,其中包含值61,000,这正是我想要的。

EN

回答 6

Stack Overflow用户

发布于 2013-03-01 23:59:01

出现这种情况的原因是,您创建的日期实际上是日期纪元的过去,而不是它之后的1m1s:

代码语言:javascript
复制
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());

及其输出;

代码语言:javascript
复制
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问题直接造成的,但几乎可以肯定是相关的。

票数 3
EN

Stack Overflow用户

发布于 2013-03-02 01:32:10

Java Date不是用来计算给定时间段的持续时间的。getTime()调用返回自1970年1月1日00:00:00GMT以来的毫秒数。在您的例子中,您实际上得到了一个在该纪元之前的日期(因此是负数)。当我运行你的代码时,我得到了21661000。(请看Sean Landsman的回答,因为我相信他已经找到了为什么你会得到负面results...hint的原因:我的号码恰好比格林尼治标准时间低6小时或21600000ms)

Joda-Time是一个非常适合解决底层问题的库。

代码语言:javascript
复制
PeriodFormatter formatter = new PeriodFormatterBuilder()
         .appendHours()
         .appendSeparator(":")
         .appendMinutes()
         .appendSeparator(":")
         .appendSeconds()
         .toFormatter();
Period period = formatter.parsePeriod("00:01:01");
assert period.toStandardDuration().getMillis() == 61000
票数 1
EN

Stack Overflow用户

发布于 2013-03-02 00:01:10

为了得到你想要的,你应该在你想要的时间和时间的起点之间进行比较。使用以下代码:

代码语言:javascript
复制
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());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15161510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档