2017-05-17 45 views
1

我想创建一个函数来检查一个字符串是否是日期。但是,下面的函数得到了错误。found found java.util.Date但需要java.sql.Date?

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

您导入'java.sql._' - 所以'test'有型'尝试[java.sql.date]' - 尝试用'进口java.util.Date'更换该进口 –

+0

我将需要Java.sql。所以我想我会需要完整的引用类型名称。 – ca9163d9

回答

7
  1. Try[Date](df.parse(date)),因为你忽略你不感兴趣,这里的类型。所以简单地省略type参数。 Try(df.parse(date))
  2. 您的功能可能会缩短。 Try(df.parse(date)).isSuccess而不是模式匹配。
  3. 如果您的环境包含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 
    
0

使用这样的:进口java.util.Date

+0

我将语句更改为'val test = Try [java.util.Date](df.parse(date))''。因为我需要java.sql._ – ca9163d9