getMilliseconds()超出Java Date

时间:2011-01-20 09:35:57

标签: java date milliseconds

我需要一个像这样的功能 long getMillis(Date aDate);

返回Date秒的毫秒数。 我不能使用Yoda,SimpleDateFormat或其他库,因为它是gwt代码。

我目前的解决方案是date.getTime() % 1000

有更好的方法吗?

3 个答案:

答案 0 :(得分:6)

正如Peter Lawrey指出的那样,一般来说你需要像

这样的东西
int n = (int) (date.getTime() % 1000);
return n<0 ? n+1000 : n;

因为%在Java中以“奇怪”的方式工作。我称之为奇怪,因为我总是需要结果落入给定范围(此处:0..999),而不是有时得到负面结果。不幸的是,它在大多数CPU和大多数语言中以这种方式工作,所以我们必须忍受它。

答案 1 :(得分:3)

尝试上面并且出现意外行为,直到我使用1000作为长的mod。

int n = (int) (date.getTime() % 1000l);
return n<0 ? n+1000 : n;

答案 2 :(得分:0)

TL;博士

aDate.toInstant()
     .toEpochMilli()

java.time

现代方法使用java.time类。这些取代了麻烦的旧遗留类,例如java.util.Date

Instant instant = Instant.now();  // Capture current moment in UTC.

提取自1970-01-01T00:00:00Z的纪元以来的毫秒数。

long millis = instant.toEpochMilli() ;

转换

如果传递了java.util.Date对象,请转换为java.time。调用添加到旧类的新方法。

Instant instant = myJavaUtilDate.toInstant() ;
long millis = instant.toEpochMilli() ;