aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2016-12-17 00:50:22 -0500
committerStewart Stewart <stewinsalot@gmail.com>2016-12-17 00:50:22 -0500
commit8415a3675234b2fa15d0806ed0ed3100c1aef932 (patch)
tree849be016906c50281be3904c837e7130af7f7662
parent9bf738070a6588cd731adef5173f586fa52611c8 (diff)
parent1cab0ee11c8bcee14103dbd0fb5e350241b9d260 (diff)
downloaddriver-core-8415a3675234b2fa15d0806ed0ed3100c1aef932.tar.gz
driver-core-8415a3675234b2fa15d0806ed0ed3100c1aef932.tar.bz2
driver-core-8415a3675234b2fa15d0806ed0ed3100c1aef932.zip
Merge branch 'date' into dal-improvements
-rw-r--r--src/main/scala/xyz/driver/core/database/database.scala4
-rw-r--r--src/main/scala/xyz/driver/core/date.scala45
2 files changed, 49 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/database/database.scala b/src/main/scala/xyz/driver/core/database/database.scala
index 54518c5..3db9c9e 100644
--- a/src/main/scala/xyz/driver/core/database/database.scala
+++ b/src/main/scala/xyz/driver/core/database/database.scala
@@ -5,6 +5,7 @@ import scala.concurrent.Future
import slick.backend.DatabaseConfig
import slick.driver.JdbcProfile
import xyz.driver.core.time.Time
+import xyz.driver.core.date.Date
package database {
@@ -36,6 +37,9 @@ package database {
implicit def `xyz.driver.core.time.Time.columnType`: BaseColumnType[Time] =
MappedColumnType.base[Time, Long](_.millis, Time(_))
+
+ implicit def `xyz.driver.core.time.Date.columnType`: BaseColumnType[Date] =
+ MappedColumnType.base[Date, java.sql.Date](_.toJavaSqlDate, Date.fromJavaDate(_))
}
object ColumnTypes {
diff --git a/src/main/scala/xyz/driver/core/date.scala b/src/main/scala/xyz/driver/core/date.scala
new file mode 100644
index 0000000..05d139d
--- /dev/null
+++ b/src/main/scala/xyz/driver/core/date.scala
@@ -0,0 +1,45 @@
+package xyz.driver.core
+
+import java.util.Calendar
+
+import scalaz.{@@, Tag}
+
+object date {
+
+ type Month = Int @@ Month.type
+ private[date] def tagMonth(value: Int): Month = Tag.of[Month.type](value)
+
+ object Month {
+ val JANUARY = tagMonth(Calendar.JANUARY)
+ val FEBRUARY = tagMonth(Calendar.FEBRUARY)
+ val MARCH = tagMonth(Calendar.MARCH)
+ val APRIL = tagMonth(Calendar.APRIL)
+ val MAY = tagMonth(Calendar.MAY)
+ val JUNE = tagMonth(Calendar.JUNE)
+ val JULY = tagMonth(Calendar.JULY)
+ val AUGUST = tagMonth(Calendar.AUGUST)
+ val SEPTEMBER = tagMonth(Calendar.SEPTEMBER)
+ val OCTOBER = tagMonth(Calendar.OCTOBER)
+ val DECEMBER = tagMonth(Calendar.DECEMBER)
+ }
+
+ final case class Date(year: Int, month: Month, day: Int) {
+ def iso8601: String = f"$year%04d-${Tag.unwrap(month) + 1}%02d-$day%02d"
+ def toJavaSqlDate = new java.sql.Date(toJavaDate.getTime)
+ def toJavaDate: java.util.Date = {
+ val cal = Calendar.getInstance()
+ cal.set(Calendar.YEAR, year - 1900)
+ cal.set(Calendar.MONTH, Tag.unwrap(month))
+ cal.set(Calendar.DAY_OF_MONTH, day)
+ cal.getTime
+ }
+ }
+
+ object Date {
+ def fromJavaDate(date: java.util.Date) = {
+ val cal = Calendar.getInstance()
+ cal.setTime(date)
+ Date(cal.get(Calendar.YEAR), tagMonth(cal.get(Calendar.MONTH)), cal.get(Calendar.DAY_OF_MONTH))
+ }
+ }
+}