我如何从当前时间获得当前的毫秒数
请注意,我不希望毫秒从时代。 我想要当前的毫秒数。
所以举个例子,我有这个代码。
Date date2 = new Date(); Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);
有没有办法让date变得毫秒? 有没有另外一种方法来做到这一点?
注意: System.currentTimeMillis()
给我毫秒从纪元,这不是我正在寻找。
你的意思是?
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.
使用日历
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; 除非某人有飞跃毫秒,或者某个日历定义为不在第二界限的时代。
Calendar.getInstance().get(Calendar.MILLISECOND);
我尝试了几个以上,但他们似乎重置@ 1000
这一个明确的工作,也应该考虑一年
long millisStart = Calendar.getInstance().getTimeInMillis();
然后如果需要的话结束时间也一样。
-
long timeNow = System.currentTimeMillis();
-
System.out.println(new Date(timeNow));
星期五四月04 14:27:05 PDT 2014
乔达时间
我想你可以用Joda-Time来做到这一点。 看看DateTime
类和getMillisOfSecond
方法。 就像是
int ms = new DateTime().getMillisOfSecond() ;
TL;博士
你要求当前时间的一小部分为毫秒数( 不是从纪元计数)。
long millis = ( Instant.now().getNano() / 1_000_000L ) ;
2017-04-25T03:01:14.113Z→
113
- 以十亿分之一秒(十亿分之一)获得分数秒。
- 除以千分之一毫秒(千)。
看到这个代码在IdeOne.com上运行 。
使用java.time
现代的方式是使用java.time类。
捕获UTC的当前时刻。
Instant.now()
更有可能你问这个具体的时区。 一秒钟的时间可能与Instant
相同,但是时区有太多的exception情况,我犹豫不决。
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
询问分数秒。 该问题要求毫秒 ,但java.time类使用更精细的纳秒分辨率。 这意味着纳秒的数量范围从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.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的遗留date时间类,如java.util.Date
, Calendar
和SimpleDateFormat
。
Joda-Time项目现在处于维护模式 ,build议迁移到java.time类。
要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。 规范是JSR 310 。
从何处获取java.time类?
- Java SE 8和SE 9及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小function和修复。
- Java SE 6和SE 7
- 大部分的java.timefunction都被移植到了ThreeTen-Backport中的 Java 6&7中。
- Android的
- ThreeTenABP项目专门针对Android,采用了ThreeTen-Backport (上文提到)。
- 请参阅如何使用ThreeTenABP …。
ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如Interval
, YearWeek
, YearQuarter
等等 。
在Java 8中,你可以简单地做
ZonedDateTime.now().toInstant().toEpochMilli()
返回:自1970-01-01T00:00:00Z以来的毫秒数
我做了testing使用Java 8它不会有问题的顺序build设者总是需要0毫秒和26和33毫秒之间的concat和迭代1000级联
希望它可以帮助您尝试与您的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)); }