9

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

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

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

有没有更好的办法?

4

3 回答 3

6

正如彼得劳里所指出的,一般来说,你需要类似的东西

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

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

于 2011-01-20T11:17:49.673 回答
3

在上面尝试并得到了意想不到的行为,直到我使用了 1000 长的 mod。

int n = (int) (date.getTime() % 1000l);
return n<0 ? n+1000 : n;
于 2011-10-05T16:52:19.273 回答
1

tl;博士

aDate.toInstant()
     .toEpochMilli()

java.time

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

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

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

long millis = instant.toEpochMilli() ;

转换

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

Instant instant = myJavaUtilDate.toInstant() ;
long millis = instant.toEpochMilli() ;
于 2017-09-02T18:30:34.280 回答