긴 Epoch 시간(밀리초)에서 Java 8 LocalDate를 작성하려면 어떻게 해야 합니까?
날짜를 반환하는 외부 API를 가지고 있습니다.long
s, Epoch 시작 후 밀리초로 표시됩니다.
오래된 스타일의 Java API로, 나는 단순히 구성했을 것이다.Date
으로 처음부터
Date myDate = new Date(startDateLong)
Java 8에서는 무엇이 동등합니까?LocalDate
/LocalDateTime
수업?
다음 중 하나로 대표되는 시점을 변환하는 데 관심이 있습니다.long
에 대해서LocalDate
내 현재 지역 표준 시간대에.
Epoch 이후 밀리초 동안 현재 로컬 시간대를 사용하여 로컬 날짜로 변환하려면
LocalDate date =
Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();
다만, 시스템의 디폴트 타임 존이 변경되는 경우도 있기 때문에, 같은 경우가 있습니다.long
같은 머신이라도 후속 실행에서 다른 결과를 얻을 수 있습니다.
또, 주의해 주세요.LocalDate
,와는 달리java.util.Date
는 실제로는 날짜가 아닌 날짜를 나타냅니다.
그렇지 않으면LocalDateTime
:
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
Instant.ofEpochMilli(긴 길이)로 시작할 수 있습니다.
LocalDate date =
Instant.ofEpochMilli(startDateLong)
.atZone(ZoneId.systemDefault())
.toLocalDate();
더 좋은 답이 있을 것 같아요.
new Timestamp(longEpochTime).toLocalDateTime();
타임존과 같은 것은 차치하고, 매우 심플한 대체 수단입니다.new Date(startDateLong)
그럴 수도 있겠지요LocalDate.ofEpochDay(startDateLong / 86400000L)
now.getTime()을 긴 값으로 바꿉니다.
//GET UTC time for current date
Date now= new Date();
//LocalDateTime utcDateTimeForCurrentDateTime = Instant.ofEpochMilli(now.getTime()).atZone(ZoneId.of("UTC")).toLocalDateTime();
LocalDate localDate = Instant.ofEpochMilli(now.getTime()).atZone(ZoneId.of("UTC")).toLocalDate();
DateTimeFormatter dTF2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
System.out.println(" formats as " + dTF2.format(utcDateTimeForCurrentDateTime));
프로젝트에 인스턴트 날짜와 로컬 날짜를 모두 사용하는 것은 그다지 좋아하지 않습니다.
내가 할 일:
val calendar = Calendar.getInstance().apply {
//set timeZone because calendar.timeInMillis = UTC milliseconds
//and calender uses the default timezone
timeZone = TimeZone.getTimeZone("UTC")
}
calendar.clear()
calendar.set(localDate.year, localDate.monthValue - 1, localDate.dayOfMonth)
val millis = calendar.timeInMillis
@Michael Piefel 답변에 기초한 간단한 버전:
LocalDate myDate = LocalDate.ofEpochDay(Duration.ofMillis(epochMillis).toDays());
에폭초 타임스탬프가 SQL에서 생성되거나 SQL과 관련된 경우 다음과 같이 얻을 수 있습니다.
long startDateLong = <...>
LocalDate theDate = new java.sql.Date(startDateLong).toLocalDate();
언급URL : https://stackoverflow.com/questions/35183146/how-can-i-create-a-java-8-localdate-from-a-long-epoch-time-in-milliseconds
'sourcecode' 카테고리의 다른 글
Java에서의 Array Lists의 교차로 및 결합 (0) | 2022.08.09 |
---|---|
vue 부트스트랩 드롭다운 목록 항목을 동적으로 추가하는 방법 (0) | 2022.08.09 |
vuex에서 vue 라이프사이클 후크에서 비동기/대기 기능을 사용하는 방법 (0) | 2022.08.09 |
왜 C99까지 선언과 코드를 혼합하는 것이 금지되었습니까? (0) | 2022.08.09 |
스트림을 사용하여 맵을 생성할 때 중복 무시 (0) | 2022.08.09 |