2017-02-24 7 views
0

ich eine Zeichenfolge habe, könnte es sein:String Match-Zeitstempel zu lange in scala

  1. "unbekannt"
  2. digitale Kette von Zeitstempeln wie "1487905455000"
  3. formatierte Datum Zeichenfolge wie "Tue Feb 14 11:27:07 +0800 2017"

Ich möchte dies zu Unix Zeitstempel als je nach Fall übertragen:

  1. „unbekannt“ wird -1
  2. Reihe von Zeitstempel auf den Long-Wert übertragen werden übertragen werden 1487905455000L
  3. formatiert Datum Zeichenfolge

so hier zeitzustempeln werden analysiert wird, ist, was ich denke dazu:

createTimeStamp = { 
    createTimestamp match { 
     case "unknown" => -1L 
     case isDAlldigitas(x) => x.toLong 
     caes _ => { 
      val format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy") 
      Try(format.parse(_).getTime) match { 
      case Success(t) => t 
      case Failure(_) => -1L 
      } 
     } 
    } 
} 

Der obige Code funktioniert nicht, aber ich weiß nicht, was ich falsch gemacht habe.

Antwort

2

Das Folgende funktioniert für drei Bedingungen. wichtig für den dritten Fall case _ mit gültigen Variablenbezeichner ersetzen wie case x

def createTimeStamp(timeStamp: String) = { 
    timeStamp match { 
    case "unknown" => -1L 
    case x if x.replaceAll("\\d", "") == "" => x.toLong 
    case x => 
      val format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy") 
      Try(format.parse(x).getTime) match { 
       case Success(t) => t 
       case Failure(_) => -1L 
      } 
     } 
    } 
+0

Hallo, danke für die Antwort, aber was, wenn format.parse (x) eine Ausnahme ergeben? – armnotstrong

+0

@armnotstrong Ich nahm an, dass wir immer die Daten im richtigen Format bekommen. Jetzt habe ich die Antwort aktualisiert –

+0

Dank Rogue, fand ich die Streichholzschachtel für scala ist schwer zu verstehen und die beste Praxis zu machen. Nochmals vielen Dank, ich werde versuchen dies – armnotstrong