Java 如何用当前时间减去时间

Java 如何用当前时间减去时间,java,scala,datetime,datetime-format,Java,Scala,Datetime,Datetime Format,我指的是Java中的给定时间和当前时间之间的时差,并试图得到它。我输入的时间格式为2018-07-26T16:00:17.163Z,我希望它与我在芝加哥的当前时间有时差。我该怎么做?这是我的片段 val currTime = System.currentTimeMillis() var strDate = timeStampToDateComverter(currTime) import java.text.SimpleDateFormat

我指的是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")
这是我的时间戳

def timeStampToDateComverter(i : Long) : String = {
    val dt = new Date(i)
    val sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss")
    sfd.format(dt)
  }
如能提供代码片段,将不胜感激。谢谢。

可以使用以下方法获得时差(以毫秒为单位):

ChronoUnit.MILLIS
   .between(Instant.parse("2018-07-26T16:00:17.163Z"), Instant.now())
Instant.now()
将是当前UTC时间,而您的输入日期是UTC时间,这使差异变得合理。无论当前时区如何,差异都是一致的。

您可以相应地更改时间单位(例如
ChronoUnit.HOURS
)。

您可以按如下方式计算差异

// 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标准库。

我建议您避免使用
SimpleDataFormat
类。它不仅早已过时,而且还出了名的麻烦。今天,我们有这么多更好的。是的,我已经消除了SimpleDateFormat现在!谢谢@OleV.V.回答不正确。字符串中的
Z
是UTC的偏移量,因此不要将其解析为文本。这意味着偏移量为零,因此格式化程序的时区America/Chicago不同意并给出错误的结果。PS如果您使用的是Java 8、9、10或11,那么另一个回答也只使用标准Java库。