현재 자정 이후의 밀리 초 수를 어떻게 알 수 있습니까? date2 =

나는 epoch에서 millis를 원하지 않습니다. 현재 시계의 밀리 초 수를 원합니다.

예를 들어이 코드가 있습니다.

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

날짜와 함께 밀리 초를 얻는 방법이 있습니까? 이를 수행하는 다른 방법이 있습니까?

참고 : System.currentTimeMillis() 내가 찾고있는 것이 아닌 epoch에서 millis를 제공합니다.



답변

무슨 뜻입니까?

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과 같을 것이라고 생각합니다. 누군가 윤 밀리 초를 가지고 있거나 어떤 달력이 두 번째 경계가 아닌 epoch로 정의되지 않는 한.


답변

Calendar.getInstance().get(Calendar.MILLISECOND);


답변

tl; dr

현재 시간의 1 초를 밀리 초 단위로 요청합니다 ( 에포크에서 계산 되지 않음 ).

Instant.now()                               // Get current moment in UTC, then…
       .get( ChronoField.MILLI_OF_SECOND )  // interrogate a `TemporalField`.

2017-04-25T03 : 01 : 14.113Z → 113

  1. 나노초 (십억) 단위의 초를 가져옵니다.
  2. 천으로 나누면 밀리 초 (천)로 자릅니다.

코드는 IdeOne.com에서 실시간으로 실행 됩니다.

java.time 사용

현대적인 방법은 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`.

아니면 직접 계산해보세요.

특정 시간대에 대해 요청할 가능성이 큽니다. 1 초의 비율은와 동일 할 가능성이 Instant있지만 시간대에는 이상이 너무 많아서 그 가정을하는 것이 주저합니다.

ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;

분수 초를 조사하십시오. 질문은 밀리 초를 요구 했지만 java.time 클래스는 더 미세한 나노초 해상도를 사용합니다 . 즉, 나노초의 범위는 0에서 999,999,999까지입니다.

long nanosFractionOfSecond = zdt.getNano();

진정으로 밀리 초를 원하면 백만으로 나누어 미세한 데이터를 자릅니다. 예를 들어 0.5 초는 500,000,000 나노초이고 또한 500 밀리 초입니다.

long millis = ( nanosFractionOfSecond / 1_000_000L ) ;  // Truncate nanoseconds to milliseconds, by a factor of one million.

java.time 정보

java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 – 시간의 수업을 java.util.Date, Calendar, SimpleDateFormat.

Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.

자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.

java.time 클래스는 어디서 구할 수 있습니까?

ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 할 수있는 가능성을 입증하는 곳입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval, YearWeek, YearQuarter, 그리고 .


답변

위의 몇 가지를 시도했지만 @ 1000으로 재설정되는 것 같습니다.

이것은 확실히 작동하며 년을 고려해야합니다.

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

필요한 경우 종료 시간에도 동일하게 수행합니다.


답변

  1. long timeNow = System.currentTimeMillis();
  2. System.out.println(new Date(timeNow));

Fri Apr 04 14:27:05 PDT 2014


답변

Joda-Time

Joda-Time 을 사용 하여이 작업을 수행 할 수 있다고 생각합니다 . DateTime클래스와 그 getMillisOfSecond방법을 살펴보십시오 . 같은 것

int ms = new DateTime().getMillisOfSecond() ;