注意,我不希望毫米来自时代。我想要当前时钟的毫秒数。
例如,我有这段代码。
Date date2 = new Date();
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
有没有办法让日期达到毫秒? 还有另一种方法吗?
注意: System.currentTimeMillis()
给了我一个不是我正在寻找的时代的毫秒。
答案 0 :(得分:191)
你的意思是?
long millis = System.currentTimeMillis() % 1000;
BTW Windows不允许时间旅行到1969年
C:\> date
Enter the new date: (dd-mm-yy) 2/8/1969
The system cannot accept the date entered.
答案 1 :(得分:24)
使用日历
Calendar.getInstance().get(Calendar.MILLISECOND);
或
Calendar c=Calendar.getInstance();
c.setTime(new Date()); /* whatever*/
//c.setTimeZone(...); if necessary
c.get(Calendar.MILLISECOND);
在实践中虽然我认为它几乎总是等于System.currentTimeMillis()%1000;除非某人有跳跃毫秒或某个日历定义的时间不在第二个边界上。
答案 2 :(得分:16)
Calendar.getInstance().get(Calendar.MILLISECOND);
答案 3 :(得分:12)
我尝试了上面几个,但他们似乎重置了@ 1000
这个肯定有用,也应该花一年时间考虑
long millisStart = Calendar.getInstance().getTimeInMillis();
然后根据需要为结束时间做同样的事情。
答案 4 :(得分:8)
您要求当前时间的一小部分为毫秒(不是从纪元开始计数)。
Instant.now() // Get current moment in UTC, then…
.get( ChronoField.MILLI_OF_SECOND ) // interrogate a `TemporalField`.
2017-04-25T03:01:14.113Z→
113
请参阅此code run live at IdeOne.com。
现代的方法是使用java.time类。
以UTC格式捕获当前时刻。
Instant.now()
使用Instant.get
方法查询TemporalField
的值。在我们的例子中,我们想要的TemporalField
是ChronoField.MILLI_OF_SECOND
。
int millis = Instant.now().get( ChronoField.MILLI_OF_SECOND ) ; // Get current moment in UTC, then interrogate a `TemporalField`.
或者自己做数学。
您更有可能在特定时区询问此问题。一秒的分数很可能与Instant
相同,但是时区有很多异常,我不愿做出这样的假设。
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
询问小数秒。该问题要求milliseconds,但java.time类使用更精细的nanoseconds分辨率。这意味着纳秒的数量范围为0到999,999,999。
long nanosFractionOfSecond = zdt.getNano();
如果您真的需要毫秒,请将更精细的数据除以一百万。例如,半秒是500,000,000纳秒,也是500毫秒。
long millis = ( nanosFractionOfSecond / 1_000_000L ) ; // Truncate nanoseconds to milliseconds, by a factor of one million.
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 5 :(得分:4)
long timeNow = System.currentTimeMillis();
System.out.println(new Date(timeNow));
Fri Apr 04 14:27:05 PDT 2014
答案 6 :(得分:2)
我认为您可以使用Joda-Time来执行此操作。查看DateTime
类及其getMillisOfSecond
方法。像
int ms = new DateTime().getMillisOfSecond() ;
答案 7 :(得分:0)
在Java 8中,您只需执行
ZonedDateTime.now().toInstant().toEpochMilli()
返回: 自1970-01-01T00:00:00Z
以来的毫秒数
答案 8 :(得分:0)
我使用java 8进行了测试 它不会影响构造器总是需要0毫秒的顺序,以及在1000和串联的迭代下的26和33毫秒之间的连续
希望它可以帮助您尝试使用您的ide
public void count() {
String result = "";
StringBuilder builder = new StringBuilder();
long millis1 = System.currentTimeMillis(),
millis2;
for (int i = 0; i < 1000; i++) {
builder.append("hello world this is the concat vs builder test enjoy");
}
millis2 = System.currentTimeMillis();
System.out.println("Diff: " + (millis2 - millis1));
millis1 = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
result += "hello world this is the concat vs builder test enjoy";
}
millis2 = System.currentTimeMillis();
System.out.println("Diff: " + (millis2 - millis1));
}
答案 9 :(得分:0)
您可以使用java.util.Calendar类来获取时间(以毫秒为单位)。 示例:
Calendar cal = Calendar.getInstance();
int milliSec = cal.get(Calendar.MILLISECOND);
// print milliSec
java.util.Date date = cal.getTime();
System.out.println("Output: " + new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss:SSS").format(date));