programing

Java에서 "unxtime" 가져오기

copyandpastes 2022. 7. 30. 21:54
반응형

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.

이미 두 가지 훌륭한 답이 있다.새로운 복제품을 만들 때, 저는 두 가지 방향으로 좀 더 깊이 들어가 보겠습니다.

  1. Java 7에서 수행할 작업
  2. 테스트 가능한 버전은 어떻게 작성합니까?

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

링크

언급URL : https://stackoverflow.com/questions/732034/getting-unixtime-in-java

반응형