2017-05-17 24 views
1

Ich versuche, eine Funktion zu erstellen, um zu überprüfen, ob eine Zeichenfolge ein Datum ist. Die folgende Funktion hat jedoch den Fehler erhalten.java.util.Date gefunden aber java.sql.Date benötigt?

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 
     } 
    } 

Fehler:

 
[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 

Gibt es einen einfacheren Weg, zu überprüfen, ob ein String ist ein Datum, ohne eine Funktion erstellen?

Die Funktion wird verwendet, um das Befehlszeilenargument zu validieren.

if (args.length != 2 || validateDate(args(0))) { .... } 
+0

Sie 'java.sql._' importiert - so' test' den Typ hat 'Versuche [java.sql.date]' - versuchen, die Einfuhr mit 'Import java.util.Date' ersetzen –

+0

Ich brauche Java.sql. also denke ich, dass ich den vollständigen zitierten Namen brauche. – ca9163d9

Antwort

7
  1. Try[Date](df.parse(date)) Sie sind nicht daran interessiert, Typ hier, weil Sie es ignorieren. Also einfach Typ Parameter weglassen. Try(df.parse(date)).
  2. Ihre Funktion könnte kürzer sein. Try(df.parse(date)).isSuccess statt Mustervergleich.
  3. Wenn Ihre Umgebung Java 8 enthält, verwenden Sie immer java.time Paket.

    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

Verwendung dieses: import java.util.Date

+0

Ich habe die Anweisung in 'val test = Try [java.util.Date] (df.parse (date))' geändert. Weil ich java.sql._ brauche – ca9163d9

Verwandte Themen