Scala 总是得到;1970年“;从时间戳中提取年份时
我有一个类似“1461819600”的时间戳。我在分布式环境中以Scala 总是得到;1970年“;从时间戳中提取年份时,scala,apache-spark,Scala,Apache Spark,我有一个类似“1461819600”的时间戳。我在分布式环境中以val-campaign\u-startdate\u-year:String=Utils.getYear(campaign\u-startdate\u-timestamp.toString 问题是我总是得到同一年的1970。这可能是原因吗 import com.github.nscala_time.time.Imports._ def getYear(timestamp: Any): Int = { var dt = 20
val-campaign\u-startdate\u-year:String=Utils.getYear(campaign\u-startdate\u-timestamp.toString
问题是我总是得到同一年的1970
。这可能是原因吗
import com.github.nscala_time.time.Imports._
def getYear(timestamp: Any): Int = {
var dt = 2017
if (!timestamp.toString.isEmpty)
{
dt = new DateTime(timestamp.toString.toLong).getYear // toLong should be multiplied by 1000 to get millisecond value
}
dt
}
当我想要得到一个月中的一天时,同样的问题也会发生。我得到的是17
,而不是28
def getDay(timestamp: Any): Int = {
var dt = 1
if (!timestamp.toString.isEmpty)
{
dt = new DateTime(timestamp.toString.toLong).getDayOfYear
}
dt
}
您可以依赖于spark sql函数(获取年/月/日,添加日/月),也可以使用JodaTime库对日期和日期时间进行更多控制,如我在这里的回答所示:您可以依赖于spark sql函数(获取年/月/日,添加日/月)或者,您可以使用JodaTime库对日期和日期时间进行更多的控制,如我在这里的回答所示:您拥有的时间戳似乎是从纪元开始的秒数(即Unix时间戳)。Java时间实用程序期望时间戳以毫秒为单位
只需将该值乘以
1000
,就可以得到预期的结果。您拥有的时间戳似乎是从纪元开始的秒数(即Unix时间戳)。Java时间实用程序期望时间戳以毫秒为单位
只需将该值乘以
1000即可得到预期结果。您拥有的时间戳是自1970年1月1日00:00:00 UTC以来的秒数
Java(和Scala)通常使用自1970年1月1日00:00:00 UTC以来的时间戳,时间戳为毫秒
换句话说,您需要将数字乘以1000。您拥有的时间戳是自1970年1月1日00:00:00 UTC以来的秒数
Java(和Scala)通常使用自1970年1月1日00:00:00 UTC以来的时间戳,时间戳为毫秒
换句话说,您需要将数字乘以1000。1970
是时间戳0
的Y轴。你确定你的toLong
转换没有返回0
值吗?@ADreNaLiNe DJ:如果字符串不是空的,为什么它会返回0
?如果它是空的,那么我将得到2017
,因为If(!timestamp.toString.isEmpty)
。字符串可能是字符串,类似于abc
。时间戳
的类型
是任何
,因此它可以是数字以外的任何东西,因此toLong
可能会返回一个0
值而失败。@ADreNaLiNe DJ:我很确定这些都是数字。但问题可能与分布式环境有关…new java.util.Date(1461819600L)
returnsSat Jan 17 16:03:39 CST 1970
。乘以1000。1970
是时间戳0
的Y轴。你确定你的toLong
转换没有返回0
值吗?@ADreNaLiNe DJ:如果字符串不是空的,为什么它会返回0
?如果它是空的,那么我将得到2017
,因为If(!timestamp.toString.isEmpty)
。字符串可能是字符串,类似于abc
。时间戳
的类型
是任何
,因此它可以是数字以外的任何东西,因此toLong
可能会返回一个0
值而失败。@ADreNaLiNe DJ:我很确定这些都是数字。但问题可能与分布式环境有关…new java.util.Date(1461819600L)
returnsSat Jan 17 16:03:39 CST 1970
。同样,java.time.{Instance,LocalDateTime,LocalDate}
java.time.{Instance,LocalDateTime,LocalDate}
而不是仅仅乘以一个“神奇的数字”