在Scala / Spark中将纪元转换为日期时间

Zah*_*Mor 3 datetime scala jodatime apache-spark

我正在使用以下方式将表示DateTime的String转换为unix_time(epoch):

def strToTime(x: String):Long = { DateTimeFormat.
    forPattern("YYYY-MM-dd HH:mm:ss").parseDateTime(x).getMillis()/1000 }
Run Code Online (Sandbox Code Playgroud)

得到像这样的Long列表:

.map( p=> List( strToTime(p(0) ) ) ) 
Run Code Online (Sandbox Code Playgroud)

我的问题是-向后上转最简单的方法是什么?就像是:

def timeToStr(x: Long):String = { x*1000L.toDateTime}
Run Code Online (Sandbox Code Playgroud)

我可以在上面的列表(长)上使用的

我已经读过 从Epcal到epoch到joda DateTime的转换秒数,但无法成功应用

Rah*_*hul 9

按照我的方法!

import java.util.Date
import java.text.SimpleDateFormat

def epochToDate(epochMillis: Long): String = {
    val df:SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd")
    df.format(epochMillis)
}   
Run Code Online (Sandbox Code Playgroud)

遵循测试运行。

scala> epochToDate(1515027919000L)
res0: String = 2018-01-03
Run Code Online (Sandbox Code Playgroud)


Sha*_*nds 6

您有一个优先级问题 -.toDateTime在应用1000L之前*被应用。括号内使调用顺序清晰的操作:

def timeToStr(x: Long): String = { (x*1000L).toDateTime }
Run Code Online (Sandbox Code Playgroud)


Zol*_*tán 5

相反的parseDateTimeprint:)

def timeToStr(epochMillis: Long): String =
  DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss").print(epochMillis)
Run Code Online (Sandbox Code Playgroud)