2013-09-08 13 views
12

Sto tentando di prendere secondi da epoca e trasformarlo in un oggetto DateTime in Scala. Io uso Joda. Sfortunatamente se uso secondi o millisecondi, sto ottenendo risultati strani. Cosa sto facendo di sbagliato qui?Convertire i secondi da epoca a joda DateTime in Scala

scala> new org.joda.time.DateTime(1378607203*1000) 
res2: org.joda.time.DateTime = 1969-12-31T02:31:40.984Z 

scala> new org.joda.time.DateTime(1378607203) 
res3: org.joda.time.DateTime = 1970-01-16T22:56:47.203Z 
+0

cosa c'è '1378607203'? –

risposta

31

Controllare una sessione REPL rapida:

scala> 1378607203 * 1000 
res6: Int = -77299016 

Strano, non è vero? :) Riesci a indovinare perché questo sta accadendo?

Ti fornirò un suggerimento estratto dal costruttore di DateTime che stai tentando di utilizzare.

DateTime(long instant) 

Ancora non capisco? Proviamo una versione leggermente diversa:

scala> 1378607203L * 1000 
res8: Long = 1378607203000 

Avviso del L che indica un valore letterale di tipo Long. Stai chiedendo 1 trilione! E Int andare solo per quanto riguarda 2 billons:

scala> Int.MaxValue 
res7: Int = 2147483647 

Così facendo DateTime(1378607203L*1000) sarà farlo funzionare.

+0

Aveva lo stesso problema in Java. Grazie! – grasshopper

+0

come si converte joda dateTime ('1970-01-16T22: 56: 47.203Z') in ora Unix? –

+2

Direi prima di studiare gli apis di data e ora. in secondo luogo, fare una domanda è COSÌ. Nella sua stessa domanda, no nella domanda di qualcun altro. – pedrofurla

Problemi correlati