我如何从当前时间获得当前的毫秒数

请注意,我不希望毫秒从时代。 我想要当前的毫秒数。

所以举个例子,我有这个代码。

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(); 

然后如果需要的话结束时间也一样。

  1. long timeNow = System.currentTimeMillis();
  2. 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

  1. 以十亿分之一秒(十亿分之一)获得分数秒。
  2. 除以千分之一毫秒(千)。

看到这个代码在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.DateCalendarSimpleDateFormat

Joda-Time项目现在处于维护模式 ,build议迁移到java.time类。

要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。 规范是JSR 310 。

从何处获取java.time类?

  • Java SE 8SE 9及更高版本
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小function和修复。
  • Java SE 6SE 7
    • 大部分的java.timefunction都被移植到了ThreeTen-Backport中的 Java 6&7中。
  • Android的
    • ThreeTenABP项目专门针对Android,采用了ThreeTen-Backport (上文提到)。
    • 请参阅如何使用ThreeTenABP …。

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如IntervalYearWeekYearQuarter 等等 。

在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)); }