2017-12-14 21 views
0

생년월일 필드가있는 사용자 사례 클래스의 데이터 집합이 있습니다. 이 데이터를 데이터베이스에 저장하려고하지만 날짜는 날짜 스탬프 형식으로 표시되므로 LocalDateTime을 사용하여 구문 분석하는 방법을 알지 못합니다. 여기에 내가 가지고있는 datestamps의 예는 다음과 같습니다타임 스탬프를 LocalDateTime으로 구문 분석 스칼라

-631065600 
885254400 
48124800 
-1007596800 

그리고 나는 이런 식으로 뭔가하려고 노력 :

val formatter = DateTimeFormatter.ofPattern("n") 

    val users = List(
    models.User(1, "[email protected]", "Роман", "Терленчан", "m", LocalDateTime.parse("885254400", formatter)), 
    models.User(2, "[email protected]", "Артём", "Пенленный", "m", LocalDateTime.parse("48124800", formatter)), 
    models.User(3, "[email protected]", "Борислав", "Фетленвич", "m", LocalDateTime.parse("-1007596800", formatter)) 
) 

을하지만 같은 예외가 있어요 :

java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {NanoOfSecond=885254400},ISO of type java.time.format.Parsed 
+0

왜 'DateTimeFormatter.ofPattern ("n")'을 사용 했습니까? –

+0

@RameshMaharjan @RameshMaharjan 잘못 이해할 수도 있지만, 나노초 단위로 날짜 형식을 설정하는 데 사용했습니다. – Cassie

+2

여기에 'LocalDateTime'은 의도적으로 시간대 또는 UTC 오프셋 정보가 부족하기 때문에 원하지 않습니다. 대신에 카운트 - 인 - epoch 수를'Instant'로 변환하고 아마도'ZonedDateTime'으로 변환하십시오. 많은 예제에서 스택 오버플로를 검색하십시오. –

답변

6

다음과 같이 변수를 타임 스탬프에서 LocalDateTime으로 변환 할 수 있습니다. LocalDateTime.ofInstant(Instant.ofEpochMilli(885254400), ZoneOffset.UTC)

+1

좋은 답변입니다. 질문의 숫자는 기원 이후의 초 (밀리 초가 아니라)이므로, .ofEpochSecond (885254400)를 원한다고 생각합니다. –

0

을 다음 코드를 사용할 수 있습니다.

val fmt = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy") 
    val date = new Date(-631065600) 
    println(LocalDateTime.parse(date.toString, fmt)) 
+0

이 숫자의 변환에 대해 예외가 발생합니다. java.time.format.DateTimeParseException : '1969-12-24'텍스트를 인덱스 0에서 파싱 할 수 없습니다. – Cassie

+0

아마도 다른 형식의 문자열 표현을 생성하는 java.sql.Date를 사용했을 것입니다. 대신 java.util.Date를 사용하십시오. – igorpcholkin

+0

또는 내 대답 좀 봐;) – Simon