Java에서 "unxtime" 가져오기
Date.getTime()은 1970년 1월1일 이후 밀리초를 반환합니다.Unixtime은 1970년 1월1일 이후 초수입니다저는 보통 자바 코드를 사용하지 않지만 버그 수정 작업을 하고 있습니다.다음과 같은 것이 있습니다.
Date now = new Date();
Long longTime = new Long(now.getTime()/1000);
return longTime.intValue();
java에서 unixtime을 얻을 수 있는 더 좋은 방법이 있나요?
System.currentTimeMillis()를 사용하여 날짜 개체를 만들지 마십시오.1000으로 나누면 Unix epoch로 이동합니다.
코멘트에서 설명한 바와 같이 unixTime 변수의 유형에는 일반적으로 박스형 오브젝트 롱(대문자 L 롱)이 아닌 원시적인 롱(소문자 L 롱)이 필요합니다.
long unixTime = System.currentTimeMillis() / 1000L;
Java 8은 날짜와 시간을 조작하기 위한 새로운 API를 추가했습니다.Java 8에서는
import java.time.Instant
...
long unixTimestamp = Instant.now().getEpochSecond();
Instant.now()
현재 시스템 시간을 나타내는 Instant를 반환합니다.와 함께getEpochSecond()
에폭초(에폭시간)를 취득할 수 있습니다.Instant
.
이미 두 가지 훌륭한 답이 있다.새로운 복제품을 만들 때, 저는 두 가지 방향으로 좀 더 깊이 들어가 보겠습니다.
- Java 7에서 수행할 작업
- 테스트 가능한 버전은 어떻게 작성합니까?
Java 7의 경우
Java 7을 계속 사용하고 있는 경우, 사용할 다른 응답 중 하나를 선택할 수 있습니다.Micha는 java.time이 Java 8에서 도입되었다고 말합니다.단, java.time은 ThreeTen Backport의 Java 6 및7에도 백포트 되어 있습니다.백포트를 취득하는 것은 Unix 타임스탬프를 취득하기 위해 과잉으로 보일 수 있지만, 프로그램에서 날짜와 시간 작업을 더 하고 있다면 고려해야 한다고 생각합니다.밑에 링크가 있어요.
또한 자신의 코드로 1000으로 나누는 것은 매우 작은 일로 보일 수 있습니다.그래도 가능한 한 많은 날짜와 시간을 표준 라이브러리(가능하면 java.time)에 맡기는 것이 습관입니다.변환은 쉬워 보이지만 틀리기 쉬운 다른 상황도 많이 있습니다.그래서 내 코드로 하고 싶지 않아.따라서 (외부 라이브러리/백포트가 없는) 순수 Java 7 솔루션은 다음과 같습니다.
long unixTime = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
System.out.println(unixTime);
1636883947
지금 나는 독자들에게 내가 왜 1000으로 나누고 있는지도 말하고 있다.암호는 조금 길지만 더 명확합니다.
테스트 가능성의 향상
java.time은 Java 7과 8 이후 모두 테스트 가능한 솔루션을 제공합니다.주사할 수 있습니다.Clock
현재 시각의 소스입니다.
Clock clock = Clock.systemUTC();
long unixTime = Instant.now(clock).getEpochSecond();
System.out.println(unixTime);
방금 출력:
1636882578
(Java 1.7.0_67에서 ThreeTen Backport 1.3.6을 사용하여 실행했습니다).
재현 가능한 결과를 얻기 위해 사용되는 시간을 제어해야 하는 테스트에서는 예를 들어 일정한 시간을 가진 클럭을 가져옵니다.
Clock clock = Clock.fixed(Instant.ofEpochSecond(1_635_936_963), ZoneOffset.UTC);
여기서 코드 출력은 지정한 시간입니다.
1635936963
이 모든 Clock
는 ★★★★★★★Instant
를하지 않기 때문에 17은 를 사용하지 않습니다.Clock
을 사용하다InstantSource
.
InstantSource instantSource
= InstantSource.fixed(Instant.ofEpochSecond(1_654_321_098));
long unixTime = instantSource.instant().getEpochSecond();
1654321098
링크
- Java 7에 대해 묻는 1635936963과 같은 Java의 현재 Long 타임스탬프 값을 얻는 방법에 대한 중복 질문이 있습니다.
- Oracle 튜토리얼: 날짜 - java.time 사용 방법을 설명합니다.
- Java Specification Request(JSR) 310, 여기서
java.time
을 사용하다 - ThreeTen Backport 프로젝트, 백업 포트
java.time
Java 6 및7 ( JSR - 310 ) ThreeTen ) 。 - Java 8+ API는 분리 기능을 통해 이용 가능
- 질문 LocalDateTime.now()로 작성된 날짜를 테스트하는 방법
언급URL : https://stackoverflow.com/questions/732034/getting-unixtime-in-java
'programing' 카테고리의 다른 글
Akryum:Vuex 매핑액션이 함수가 아닙니다(typeError). (0) | 2022.08.03 |
---|---|
vuex typeError의 vue-progressbar (0) | 2022.08.03 |
OpenCV의 cvWaitKey() 함수는 무엇을 합니까? (0) | 2022.07.30 |
Vue 라우터에서의 JSON 반환 (0) | 2022.07.30 |
java.util.date에서 Joda Time으로 변환합니다. (0) | 2022.07.30 |