如何用当前时间减去时间

时间:2018-08-08 13:43:15

标签: java scala datetime datetime-format

我指的是this question,并试图获取Java中给定时间与当前时间之间的时差。我的输入时间为2018-07-26T16:00:17.163Z格式,我希望它与我在芝加哥的当前时间存在时差。我怎么做?这是我的片段

        val currTime  = System.currentTimeMillis()
        var strDate = timeStampToDateComverter(currTime)
        import java.text.SimpleDateFormat
        import java.util.Calendar
        val formatter_datetime = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

        import java.util.TimeZone
        formatter_datetime.setTimeZone(TimeZone.getTimeZone("America/Chicago"))
        val parsedTime2 = formatter_datetime.parse(strDate)

        var str1 =  "2018-07-26T16:00:17.163Z"

        val parsedTime1 = formatter_datetime.parse((str1.substring(0,str1.indexOfSlice("T")) + " " + str1.substring(str1.indexOfSlice("T")+1,str1.indexOfSlice("T")+9)))
        val dm = TimeUnit.MILLISECONDS.toMillis(new java.sql.Date(parsedTime2.getTime()).getTime()) - TimeUnit.MILLISECONDS.toMillis(new java.sql.Date(parsedTime1.getTime()).getTime())
        val seconds = dm / 1000
        val minutes = seconds / 60
        val hours = minutes / 60
        val days = hours / 24
        val weeks = days / 7
        val days_out = days % 7
        pipelineTotalExecutionTime = (weeks +"w "+ days_out + "d " + hours % 24 + "h " + minutes % 60 + "m")

这是我的timeStampToDateComverter

def timeStampToDateComverter(i : Long) : String = {
    val dt = new Date(i)
    val sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss")
    sfd.format(dt)
  }

代码片段将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:2)

时间差(以毫秒为单位)可以使用:

ChronoUnit.MILLIS
   .between(Instant.parse("2018-07-26T16:00:17.163Z"), Instant.now())

Instant.now()将是当前的UTC时间,而您输入的日期是UTC时间,这使区分变得更明智。无论当前时区如何,时差都将保持一致。
您可以相应地更改时间单位(例如ChronoUnit.HOURS)。

答案 1 :(得分:-1)

您可以像下面那样计算差异。

// Your date string
val dateStr    = "2018-07-26T16:00:17.163Z"
// Define the date format
val dateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")    
// Set Chicago timezone    
dateFormat.setTimeZone(java.util.TimeZone.getTimeZone("America/Chicago"))

// Calculate the diff
val diff: Long = dateFormat.parse(dateStr).getTime() - System.currentTimeMillis()

此代码仅使用Java标准库。