나는 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
- 나노초 (십억) 단위의 초를 가져옵니다.
- 천으로 나누면 밀리 초 (천)로 자릅니다.
이 코드는 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 클래스는 어디서 구할 수 있습니까?
- Java SE 8 및 SE 9 이상
- 내장.
- 번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 SE 7
- java.time 기능의 대부분은 ThreeTen-Backport의 Java 6 및 7로 백 포트됩니다 .
- 기계적 인조 인간
- ThreeTenABP의 프로젝트는 적응 ThreeTen – 백 포트 특히 안드로이드에 대한 (위에서 언급).
- ThreeTenABP 사용 방법…을 참조하십시오 .
ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 할 수있는 가능성을 입증하는 곳입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
답변
위의 몇 가지를 시도했지만 @ 1000으로 재설정되는 것 같습니다.
이것은 확실히 작동하며 년을 고려해야합니다.
long millisStart = Calendar.getInstance().getTimeInMillis();
필요한 경우 종료 시간에도 동일하게 수행합니다.
답변
long timeNow = System.currentTimeMillis();
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() ;