我需要一个像这样的功能 long getMillis(Date aDate);
返回Date秒的毫秒数。 我不能使用Yoda,SimpleDateFormat或其他库,因为它是gwt代码。
我目前的解决方案是date.getTime() % 1000
有更好的方法吗?
答案 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)
aDate.toInstant()
.toEpochMilli()
现代方法使用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() ;