2017-05-17 46 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