我正在尝试创建一个函数来检查字符串是否为日期。但是,以下函数出错了。
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import java.sql._
import scala.util.{Success, Try}
def validateDate(date: String): Boolean = {
val df = new java.text.SimpleDateFormat("yyyyMMdd")
val test = Try[Date](df.parse(date))
test match {
case Success(_) => true
case _ => false
}
}
错误:
[error] C:\Users\user1\IdeaProjects\sqlServer\src\main\scala\main.scala:14: type mismatch; [error] found : java.util.Date [error] required: java.sql.Date [error] val test = Try[Date](df.parse(date)) [error] ^ [error] one error found [error] (compile:compileIncremental) Compilation failed [error] Total time: 2 s, completed May 17, 2017 1:19:33 PM
有没有更简单的方法来验证字符串是否是一个没有创建函数的日期?
该函数用于验证命令行参数。
if (args.length != 2 || validateDate(args(0))) { .... }
答案 0 :(得分:7)
Try[Date](df.parse(date))
您对此处的类型不感兴趣,因为您忽略它。所以只需省略类型参数。 Try(df.parse(date))
。Try(df.parse(date)).isSuccess
代替模式匹配。如果您的环境包含java 8,请始终使用java.time
包。
import scala.util.Try
import java.time.LocalDate
import java.time.format.DateTimeFormatter
// Move creation of formatter out of function to reduce short lived objects allocation.
val df = DateTimeFormatter.ofPattern("yyyy MM dd")
def datebleStr(s: String): Boolean = Try(LocalDate.parse(s,df)).isSuccess
答案 1 :(得分:0)
使用:import java.util.Date