Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为什么减去两个日期会给我额外的一个小时?_Scala - Fatal编程技术网

Scala 为什么减去两个日期会给我额外的一个小时?

Scala 为什么减去两个日期会给我额外的一个小时?,scala,Scala,我想在我的程序的一些方法上执行一些基准测试,所以我写了这个小片段 object ExecutionTime { private val format = new java.text.SimpleDateFormat("hh:mm:ss") private var timeList = scala.collection.mutable.MutableList[String]() def startTimer() : Long = { val start = System.

我想在我的程序的一些方法上执行一些基准测试,所以我写了这个小片段

object ExecutionTime {

  private val format = new java.text.SimpleDateFormat("hh:mm:ss")

  private var timeList = scala.collection.mutable.MutableList[String]()

  def startTimer() : Long = {
    val start = System.currentTimeMillis()
    start
  }

  def getExecutionTime(start : Long) {
    val executionTime = System.currentTimeMillis() - start
    timeList.+=(format.format(new Date(executionTime)))
  }

  def printResults() {
    timeList.mkString(" /n ")
  }
}
为了测试这一点,我运行了以下代码:

object Test {
  val begin = ExecutionTime.startTimer()
  waitFor2Seconds()
  ExecutionTime.getExecutionTime(begin)
  ExecutionTime.printResults()
}
但是,当我运行此命令时,会得到一个奇怪的输出:

01:00:02 // Should be 00:00:02
我得到的结果是我期望的结果,但还有1个小时。
有人对此有想法吗

您正在使用时钟测量之间的时间差构建一个
日期
对象。因此,在构造字符串时,
SimpleDateFormat
将日期转换为本地时间

从(我的)重点:

SimpleDataFormat是一个用于格式化和解析日期的具体类 以对地区敏感的方式

您的构造日期为历元+2秒,因此您的本地时间必须为(历元+1小时+2秒);这就是格式化程序正在打印的内容

要在不增加1小时的情况下进行SimpleDataFormat打印,您需要将区域设置为GMT,并将小时格式更改为
“HH”


您正在使用时钟测量之间的时间差来构造一个
日期
对象。因此,在构造字符串时,
SimpleDateFormat
将日期转换为本地时间

从(我的)重点:

SimpleDataFormat是一个用于格式化和解析日期的具体类 以对地区敏感的方式

您的构造日期为历元+2秒,因此您的本地时间必须为(历元+1小时+2秒);这就是格式化程序正在打印的内容

要在不增加1小时的情况下进行SimpleDataFormat打印,您需要将区域设置为GMT,并将小时格式更改为
“HH”


另一个建议是,查看Joda时间库()。此库可用于轻松地减去和添加时间段,并动态转换为时间格式。与SimpleDataFormat类相比,我更喜欢它。

另一个建议是,查看Joda时间库()。此库可用于轻松地减去和添加时间段,并动态转换为时间格式。与SimpleDateFormat类相比,我更喜欢它。

碰巧,您所在的位置的时区是格林威治标准时间后1小时吗?我这样问是因为您正在使用测量的时间增量构建日期,日期格式化程序可能正在转换为“本地时间”…事实上,我是GMT+1!在GMT+1中设置格式有什么诀窍吗?
Date
对象实际上并不是用来存储持续时间的。
Date
格式是时间戳,而不是持续时间。如果在Java8JVM上运行,请使用Java8
Java.time
API,而不是旧的
Java.util.Date
。您可以使用
java.time.Duration
来实现这一点。您所在的位置的时区是格林威治标准时间后1小时吗?我这样问是因为您正在使用测量的时间增量构建日期,日期格式化程序可能正在转换为“本地时间”…事实上,我是GMT+1!在GMT+1中设置格式有什么诀窍吗?
Date
对象实际上并不是用来存储持续时间的。
Date
格式是时间戳,而不是持续时间。如果在Java8JVM上运行,请使用Java8
Java.time
API,而不是旧的
Java.util.Date
。你应该使用
java.time.Duration
来实现这一点。这可能是正确的方法,不幸的是“GMT”时区给我12:00:02,不太清楚,GMT+1:00给我的结果与之前相同。将格式更改为“HH:mm:ss”(注意大写字母“H”)。谢谢!下次我会记得用大写字母“H”!这可能是正确的方法,不幸的是“GMT”时区给我12:00:02,不太清楚,GMT+1:00给我的结果与之前相同。将格式更改为“HH:mm:ss”(注意大写字母“H”)。谢谢!下次我会记得用大写字母“H”!
private val format = new java.text.SimpleDateFormat("HH:mm:ss")
format.setTimeZone(java.util.TimeZone.getTimeZone("GMT"))