128

注意,我不想要时代的毫秒。我想要当前时钟上的毫秒数。

例如,我有这段代码。

Date date2 = new Date(); 
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);

有没有办法获得日期的毫秒数?还有另一种方法可以做到这一点吗?

注意: System.currentTimeMillis()给我来自时代的毫秒,这不是我想要的。

4

11 回答 11

202

你的意思是?

long millis = System.currentTimeMillis() % 1000;

顺便说一句,Windows 不允许时间旅行到 1969 年

C:\> date
Enter the new date: (dd-mm-yy) 2/8/1969
The system cannot accept the date entered.
于 2012-08-02T20:27:52.950 回答
26

使用日历

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; 除非有人有闰毫秒或某些日历是用不在第二边界上的纪元定义的。

于 2012-08-02T20:27:58.650 回答
17
Calendar.getInstance().get(Calendar.MILLISECOND);
于 2012-08-02T20:30:46.433 回答
15
于 2017-02-18T08:15:54.723 回答
14

我在上面尝试了几个,但它们似乎重置了@ 1000

这个肯定有效,还应该考虑到年份

long millisStart = Calendar.getInstance().getTimeInMillis();

然后在需要时对结束时间执行相同的操作。

于 2015-01-15T13:43:23.760 回答
5
  1. long timeNow = System.currentTimeMillis();
  2. System.out.println(new Date(timeNow));

Fri Apr 04 14:27:05 PDT 2014

于 2014-04-04T21:33:25.673 回答
3

乔达时间

我认为您可以使用Joda-Time来执行此操作。看一下这个DateTime类和它的getMillisOfSecond方法。就像是

int ms = new DateTime().getMillisOfSecond() ;
于 2012-08-02T21:05:49.423 回答
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));
于 2020-06-28T12:54:04.827 回答
0

在 Java 8 中,你可以简单地做

ZonedDateTime.now().toInstant().toEpochMilli()

返回:自 1970-01-01T00:00:00Z 纪元以来的毫秒数

于 2017-02-18T05:16:54.990 回答
0

爪哇 8:

LocalDateTime toDate = LocalDateTime.now();
LocalDateTime fromDate = LocalDateTime.of(toDate.getYear(), toDate.getMonth(), 
toDate.getDayOfMonth(), 0, 0, 0);
long millis = ChronoUnit.MILLIS.between(fromDate, toDate);
于 2020-01-20T15:11:19.787 回答
0

我使用 java 8 进行了测试 构建器总是花费 0 毫秒的顺序和 26 到 33 毫秒之间的连接以及 1000 连接的迭代并不重要

希望它可以帮助您尝试一下

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));
    }
于 2017-06-16T01:39:02.797 回答