Java 8의 LocalDateTime에서 밀리 초를 얻는 방법
상기 새를 사용 1970년 1월 1일 (시대)부터 현재의 밀리 초를 얻을 수있는 방법이 있는지 궁금 LocalDate
, LocalTime
또는 LocalDateTime
자바 8 클래스.
알려진 방법은 다음과 같습니다.
long currentMilliseconds = new Date().getTime();
또는
long currentMilliseconds = System.currentTimeMillis();
"현재 밀리 초"의 의미를 완전히 확신 할 수는 없지만 "epoch"이후의 밀리 초 수, 즉 1970 년 1 월 1 일 자정 (UTC)으로 가정합니다.
당신은 시대 이후의 밀리 초 수를 찾으려면 지금 다음 사용 System.currentTimeMillis()
으로 Anubian 멍청한 놈 지적했다 . 그렇다면 새로운 java.time API를 사용하여이를 수행 할 이유가 없습니다.
그러나 LocalDateTime
어딘가에서 이미 비슷한 객체 가 있거나 신기원부터 밀리 초로 변환하려고 할 수 있습니다. LocalDateTime
객체 패밀리에 현재 시간대가 무엇인지에 대한 개념이 없기 때문에 직접 할 수 는 없습니다. 따라서 표준 시간대 정보는 UTC와 같은 에포크와 관련된 시간을 찾기 위해 제공되어야합니다.
다음 LocalDateTime
과 같은 것이 있다고 가정 하십시오.
LocalDateTime ldt = LocalDateTime.of(2014, 5, 29, 18, 41, 16);
시간대 정보를 적용하여을 제공해야합니다 ZonedDateTime
. 저는 로스 앤젤레스와 같은 시간대에 있으므로 다음과 같은 작업을 수행합니다.
ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/Los_Angeles"));
물론 이것은 시간대에 대한 가정입니다. 예를 들어 현지 시간으로 일광 절약 시간 (서머 타임) 전환 근처의 시간을 지정하는 경우에 발생할 수있는 엣지 사례가 있습니다. 이것들을 제쳐두고 보자. 그러나 당신은이 경우들이 존재한다는 것을 알아야한다.
어쨌든, 유효한을 얻을 수 있다면 ZonedDateTime
, 에포크 이후로 밀리 초 수로 변환 할 수 있습니다.
long millis = zdt.toInstant().toEpochMilli();
시간대를 지정하지 않은 것은
System.out.println("ldt " + LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
System.out.println("ctm " + System.currentTimeMillis());
준다
ldt 1424812121078
ctm 1424812121281
System.current ....를 좋아하지 않는 경우를 대비하여 Instant.now().toEpochMilli()
ZoneId를 피하려면 다음을 수행하십시오.
LocalDateTime date = LocalDateTime.of(1970, 1, 1, 0, 0);
System.out.println("Initial Epoch (TimeInMillis): " + date.toInstant(ZoneOffset.ofTotalSeconds(0)).toEpochMilli());
값으로 0을 얻는 것은 맞습니다!
Java 8부터을 호출 할 수 있습니다 java.time.Instant.toEpochMilli()
.
예를 들어 전화
final long currentTimeJava8 = Instant.now().toEpochMilli();
당신과 같은 결과를 제공합니다
final long currentTimeJava1 = System.currentTimeMillis();
에포크 이후로 현재 시간을 밀리 초 단위로 얻으려면을 사용하십시오 System.currentTimeMillis()
.
java.sql.Timestamp
밀리 초를 얻는 데 사용할 수도 있습니다 .
LocalDateTime now = LocalDateTime.now();
long milliSeconds = Timestamp.valueOf(now).getTime();
System.out.println("MilliSeconds: "+milliSeconds);
Java 8 Clock을 사용하는 경우 사용할 수 있습니다 clock.millis()
( clock.instant()
보다 정확하기 때문에 Java 8 Instant를 얻는 것이 좋습니다 ).
왜 Java 8 시계를 사용 하시겠습니까? DI 프레임 워크에서 Clock bean을 생성 할 수 있습니다 :
@Bean
public Clock getClock() {
return Clock.systemUTC();
}
그런 다음 테스트에서 쉽게 조롱 할 수 있습니다.
@MockBean private Clock clock;
또는 다른 콩을 가질 수 있습니다 :
@Bean
public Clock getClock() {
return Clock.fixed(instant, zone);
}
날짜와 시간을 측정 할 수없는 테스트에 도움이됩니다.
default LocalDateTime getDateFromLong(long timestamp) {
try {
return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneOffset.UTC);
} catch (DateTimeException tdException) {
// throw new
}
}
default Long getLongFromDateTime(LocalDateTime dateTime) {
return dateTime.atOffset(ZoneOffset.UTC).toInstant().toEpochMilli();
}
참고 URL : https://stackoverflow.com/questions/23944370/how-to-get-milliseconds-from-localdatetime-in-java-8
'Programing' 카테고리의 다른 글
vi에서 한 파일의 내용을 다른 파일로 복사하여 붙여 넣기 (0) | 2020.04.13 |
---|---|
PHP로 메모리를 비우는 데 더 좋은 점 : unset () 또는 $ var = null (0) | 2020.04.13 |
DOMContentLoaded와 load 이벤트의 차이점 (0) | 2020.04.12 |
jQuery AJAX 요청을 취소 / 취소하는 방법은 무엇입니까? (0) | 2020.04.12 |
TypeScript의 "* .d.ts"정보 (0) | 2020.04.12 |