Skip to content

Commit c327bc9

Browse files
committed
Moved the only remaining function from DataTypeConversions to DateUtils
1 parent dec6802 commit c327bc9

File tree

4 files changed

+32
-58
lines changed

4 files changed

+32
-58
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/LocalRelation.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ package org.apache.spark.sql.catalyst.plans.logical
2020
import org.apache.spark.sql.Row
2121
import org.apache.spark.sql.catalyst.{CatalystTypeConverters, analysis}
2222
import org.apache.spark.sql.catalyst.expressions.Attribute
23-
import org.apache.spark.sql.types.{DataTypeConversions, StructType, StructField}
23+
import org.apache.spark.sql.types.{StructType, StructField}
2424

2525
object LocalRelation {
2626
def apply(output: Attribute*): LocalRelation = new LocalRelation(output)

sql/catalyst/src/main/scala/org/apache/spark/sql/types/DataTypeConversions.scala

Lines changed: 0 additions & 55 deletions
This file was deleted.

sql/catalyst/src/main/scala/org/apache/spark/sql/types/DateUtils.scala

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.apache.spark.sql.types
1919

2020
import java.sql.Date
21+
import java.text.SimpleDateFormat
2122
import java.util.{Calendar, TimeZone}
2223

2324
import org.apache.spark.sql.catalyst.expressions.Cast
@@ -57,4 +58,32 @@ object DateUtils {
5758
}
5859

5960
def toString(days: Int): String = Cast.threadLocalDateFormat.get.format(toJavaDate(days))
61+
62+
def stringToTime(s: String): java.util.Date = {
63+
if (!s.contains('T')) {
64+
// JDBC escape string
65+
if (s.contains(' ')) {
66+
java.sql.Timestamp.valueOf(s)
67+
} else {
68+
java.sql.Date.valueOf(s)
69+
}
70+
} else if (s.endsWith("Z")) {
71+
// this is zero timezone of ISO8601
72+
stringToTime(s.substring(0, s.length - 1) + "GMT-00:00")
73+
} else if (s.indexOf("GMT") == -1) {
74+
// timezone with ISO8601
75+
val inset = "+00.00".length
76+
val s0 = s.substring(0, s.length - inset)
77+
val s1 = s.substring(s.length - inset, s.length)
78+
if (s0.substring(s0.lastIndexOf(':')).contains('.')) {
79+
stringToTime(s0 + "GMT" + s1)
80+
} else {
81+
stringToTime(s0 + ".0GMT" + s1)
82+
}
83+
} else {
84+
// ISO8601 with GMT insert
85+
val ISO8601GMT: SimpleDateFormat = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSz" )
86+
ISO8601GMT.parse(s)
87+
}
88+
}
6089
}

sql/core/src/main/scala/org/apache/spark/sql/json/JsonRDD.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ private[sql] object JsonRDD extends Logging {
391391
value match {
392392
// only support string as date
393393
case value: java.lang.String =>
394-
DateUtils.millisToDays(DataTypeConversions.stringToTime(value).getTime)
394+
DateUtils.millisToDays(DateUtils.stringToTime(value).getTime)
395395
case value: java.sql.Date => DateUtils.fromJavaDate(value)
396396
}
397397
}
@@ -400,7 +400,7 @@ private[sql] object JsonRDD extends Logging {
400400
value match {
401401
case value: java.lang.Integer => new Timestamp(value.asInstanceOf[Int].toLong)
402402
case value: java.lang.Long => new Timestamp(value)
403-
case value: java.lang.String => toTimestamp(DataTypeConversions.stringToTime(value).getTime)
403+
case value: java.lang.String => toTimestamp(DateUtils.stringToTime(value).getTime)
404404
}
405405
}
406406

0 commit comments

Comments
 (0)