我需要一个像 long getMillis(Date aDate); 这样的函数
返回 Date 秒的毫秒数。我不能使用 Yoda、SimpleDateFormat 或其他库,因为它是 gwt 代码。
我目前的解决方案是date.getTime() % 1000
有没有更好的办法?
我需要一个像 long getMillis(Date aDate); 这样的函数
返回 Date 秒的毫秒数。我不能使用 Yoda、SimpleDateFormat 或其他库,因为它是 gwt 代码。
我目前的解决方案是date.getTime() % 1000
有没有更好的办法?
正如彼得劳里所指出的,一般来说,你需要类似的东西
int n = (int) (date.getTime() % 1000);
return n<0 ? n+1000 : n;
因为%
在 Java 中以“奇怪”的方式工作。我称之为奇怪,因为我总是需要结果落入给定范围(这里:0..999),而不是有时会得到负面结果。不幸的是,它在大多数 CPU 和大多数语言中都以这种方式工作,所以我们必须忍受它。
在上面尝试并得到了意想不到的行为,直到我使用了 1000 长的 mod。
int n = (int) (date.getTime() % 1000l);
return n<0 ? n+1000 : n;
aDate.toInstant()
.toEpochMilli()
现代方法使用 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() ;