2017-07-28 76 views
1

我有一個像「1461819600」這樣的時間戳。我在分佈式環境中執行此代碼爲val campaign_startdate_year: String = Utils.getYear(campaign_startdate_timestamp).toString從時間戳中提取一年時總是得到「1970」

問題是我總是得到同一年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 
    } 
+0

'1970'是時間戳「0」的yrear。你確定你的'toLong'轉換沒有返回'0'值嗎? –

+0

@ ADreNaLiNe-DJ:如果字符串不爲空,爲什麼它會返回'0'?如果它是空的,那麼我會因'if(!timestamp.toString.isEmpty)'而獲得'2017'。 – Dinosaurius

+0

'string'可能是''''''''''''''''''。 'timestamp'的'type'是'Any',所以它可以是數字以外的任何東西,所以'toLong'可能會因返回'0'值而失敗。 –

回答

3

您擁有的時間戳記爲自01-01-1970,00:00:00 UTC。

Java(和Scala)通常使用的時間戳記是從01-01-1970,00:00:00 UTC開始的毫秒數

換句話說,您需要將數字乘以1000.

+0

我會使用java.util.concurrent.TimeUnit.SECONDS.toMllis(s)而不是乘以'幻數' –

1

時間戳,你似乎在自紀元(即Unix時間戳)。 Java時間實用程序預計時間戳記爲毫秒

只需將該值乘以1000即可獲得預期結果。