어떻게 자바 8 긴 (UNIX 신기원 시간)에 (스칼라) 날짜 시간 문자열을 변환하는 방법

samthebest :

나는 약간의 문자열의 UNIX 신기원 시간 POSIX (시간, 유닉스 시간) 원하는 pattern문자열은 일반 형식 (UTC 있도록)입니다. 자바 8하지 Joda 또는 오래된 자바를 사용하시기 바랍니다.

(밀리 초를 참조하시기 바랍니다 ) 자바 8 (스칼라 (UNIX 신기원 시간) 밀리 초 길이로 날짜 시간 문자열을 변환하는 방법 )

지금까지 나는 아래를 가지고,하지만 난 이유로이 싫어 :

  1. 그것은 날짜 (UNIX 신기원 시간으로 변환)과 함께 할 수있는 가장 일반적인 것은 무엇 너무 자세한 방법입니다. 어떤 일을해야합니다 위해 7 방법은 호출합니다.
  2. 그것은 UTC를 지정할 수있다, 그러나 확실하게 UTC는 내가 왜 여기에 명시해야합니까, 그냥 기본값입니다?
  3. 그것은 문자열 리터럴을 가지고 "UTC"
  4. 그것은 마법의 번호를 가지고 ZoneOffset.ofHours(0)

지금까지 내 최고의 :

def dateTimeStringToEpoch(s: String, pattern: String): Long = 
    LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
      .atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(0)))
      .toInstant().getEpochSeconds

또한, 보너스 질문, 그것은 효율적인가요? 만드는 오버 헤드 있습니까 DateTimeFormatter통해이 DateTimeFormatter.ofPattern(pattern)? 왜하면?

ETO :

이 사람은 2 배 이상 짧은입니다 ( 단 3 메서드 호출 ) :

def dateTimeStringToEpoch(s: String, pattern: String): Long = 
     LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
                  .toEpochSecond(ZoneOffset.UTC)

BTW, 나는 만들 것이다 DateTimeFormatter외부 dateTimeStringToEpoch와 메소드 매개 변수로 전달 :

def dateTimeStringToEpoch(s: String, formatter: DateTimeFormatter): Long = 
     LocalDateTime.parse(s, formatter).toEpochSecond(ZoneOffset.UTC)

실제로 성능 테스트를 실행하는 데는 초기화하는 성능에 약간의 차이 (2의 거의 배)가 DateTimeFormatter외부에게 방법.

scala> val pattern = "yyyy/MM/dd HH:mm:ss"
pattern: String = yyyy/MM/dd HH:mm:ss

scala>   time(() => randomDates.map(dateTimeStringToEpoch(_, pattern)))
Took: 1216

scala>   time(() => randomDates.map(dateTimeStringToEpochFixed))
Took: 732

추천

출처http://43.154.161.224:23101/article/api/json?id=173067&siteId=1