小编Gol*_*lly的帖子

模式匹配依赖类型 - 如何避免asInstanceOf?

我在如何完成以下操作时没有作弊和使用asInstanceOf.

假设我有一些任意密封类型的对象,每个对象都有自己的类型成员.

  sealed trait Part { type A }
  case object P1 extends Part { override type A = String }
  case object P2 extends Part { override type A = Int }
Run Code Online (Sandbox Code Playgroud)

现在说我将P和PA值捆绑在一起......

  trait PartAndA {
    val p: Part
    val a: p.A
  }

  object PartAndA {
    type Aux[P <: Part] = PartAndA {val p: P}

    def apply(_p: Part)(_a: _p.A): Aux[_p.type] =
      new PartAndA {
        override val p: _p.type = _p
        override val a          = _a
      }
  } …
Run Code Online (Sandbox Code Playgroud)

scala scala-2.11

5
推荐指数
1
解决办法
282
查看次数

ZonedDateTime.parse错误?

给定a ZonedDateTime,在某些情况下,调用toStringZonedDateTime.parse返回不同的时间.

这是一个具体的例子.代码在Scala中,但它在Java中没有什么不同.

import java.time._

val t = 1193534827725L
val z = ZoneId.of("Europe/Paris")

val a = Instant.ofEpochMilli(t).atZone(z) // 2007-10-28T02:27:07.725+01:00[Europe/Paris]
val b = ZonedDateTime.parse(a.toString)   // 2007-10-28T02:27:07.725+02:00[Europe/Paris]
a == b // returns false!
Run Code Online (Sandbox Code Playgroud)

重新解析的值也有不同的epochMilli:

scala> List(a, b).map(_.toInstant.toEpochMilli)
res46: List[Long] = List(1193534827725, 1193531227725)

scala> List(a, b).map(_.toInstant.toEpochMilli == t)
res47: List[Boolean] = List(true, false)
Run Code Online (Sandbox Code Playgroud)

使用.format(DateTimeFormatter.ISO_ZONED_DATE_TIME)而不是.toString也不起作用.

根据Javadoc的推荐Instant#atZone,参考https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html#ofInstant-java.time.Instant-java.time.ZoneId-

将瞬间转换为分区日期时间很简单,因为每个瞬间只有一个有效偏移量.

这是怎么回事?

编辑:还值得一提的是,在采样时间(ref)周围发生了夏令时,因此有两个实例02:27:07.725.正如您从.toString偏移中看到的那样是正确的,但解析似乎并不尊重它.

java scala java-time

5
推荐指数
1
解决办法
347
查看次数

标签 统计

scala ×2

java ×1

java-time ×1

scala-2.11 ×1