Skip to content

Instantly share code, notes, and snippets.

@ramirez7
Created September 21, 2016 04:24
Show Gist options
  • Select an option

  • Save ramirez7/7def951dbf1519a2c2fa53a4bb603ec1 to your computer and use it in GitHub Desktop.

Select an option

Save ramirez7/7def951dbf1519a2c2fa53a4bb603ec1 to your computer and use it in GitHub Desktop.
import shapeless._
import org.joda.time.{DateTime, DateTimeZone}
sealed abstract class Zoned[Z <: DateTimeZone] {
def dt: DateTime
override def toString: String = dt.toString
}
object Zoned {
private case class zonedImpl[Z <: DateTimeZone](dt: DateTime) extends Zoned[Z]
def apply[Z <: DateTimeZone](dt: DateTime)(implicit w: Witness.Aux[Z]): Option[Zoned[Z]] = {
val zone = w.value
if (dt.getZone == zone) Some(zonedImpl(dt))
else None
}
}
// USAGE
scala> import DateTimeZone.UTC
import DateTimeZone.UTC
scala> val PacificTime = DateTimeZone.forID("US/Pacific")
PacificTime: org.joda.time.DateTimeZone = America/Los_Angeles
scala> Zoned[PacificTime.type](new DateTime())
res0: Option[Zoned[PacificTime.type]] = Some(2015-12-30T14:28:35.921-08:00)
scala> Zoned[UTC.type](new DateTime())
res1: Option[Zoned[org.joda.time.DateTimeZone.UTC.type]] = None
scala> Zoned[UTC.type](new DateTime().withZone(UTC))
res2: Option[Zoned[org.joda.time.DateTimeZone.UTC.type]] = Some(2015-12-30T22:28:52.776Z)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment