我指的是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)
}
代码片段将不胜感激。谢谢。
答案 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标准库。