2017-12-14 1 views
0

私は、生年月日フィールドを持つユーザケースクラスのデータセットを持っています。私はこのデータをデータベースに入れたいのですが、日付は日付スタンプの形式で表されるので、LocalDateTimeを使って解析する方法はわかりません。ここ は、私が持っている日付スタンプの例です:LocalDateTimeにタイムスタンプを解析するScala

-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間違っているかもしれませんが、ナノ秒単位で日付の書式を設定するために使用しました – Cassie

+2

ここでは、そのクラスに故意にタイムゾーンやUTCからのオフセット情報がないため、ここではLocalDateTimeは望ましくありません。代わりに、エポックカウント数を '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

関連する問題