2016-06-24 5 views
1

Ich bin ein Neuling zu Groovy. Ich habe folgende Termine in meinem db:Groovy: verschiedene Datumsformate und Konvertierungen handhaben

1:00 AM 

10:00 PM 

1:00AM (wie oben ohne Leerzeichen)

1:00:00 

13:00 

13:00:00 

Ich möchte, dass sie auf das gleiche Format gescannt und umgewandelt werden. Gibt es einen einfachen Weg in Groovy, den ich wählen kann? (Diese werden als Strings in einer Datenbank gespeichert). Lets sagen, ich möchte alle Termine in AM | PM Format sein.

Ich bin in der Lage zu unterscheiden zwischen Formaten mit Regex-Matching, aber immer noch verwirrt, wie Sie sie konvertieren.

Jede Hilfe wird geschätzt.

Antwort

1

Wenn Sie auf Java sind 8, Sie DateTimeFormatter mit optionalen Muster konstruieren könnte jede Ihrer Anwendungsfälle abdeckt:

def times = [ 
    '1:00 AM', 
    '10:00 PM', 
    '1:00AM', 
    '1:00:00', 
    '13:00', 
    '13:00:00' 
] 

import java.time.LocalTime 
import java.time.format.DateTimeFormatter; 
import java.time.format.DateTimeFormatterBuilder; 

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
      .parseLenient() 
      .appendPattern("[h:mm a][h:mm a][h:mma][H:mm:ss][H:mm][h:mm:SSa][hh:mm:SS a]") 
      .toFormatter(); 

times.each { 
    println LocalTime.parse(it, formatter) 
} 
+0

Vielen Dank . Das hat perfekt funktioniert. –

0

Nun nach der Methode zu schreiben, die Ausgabe würden die verschiedenen Formate für Sie ist es formatmethod() nennen lassen, können Sie die subtring() Methode in Groovy mit einfachen verwenden, wenn Aussagen über die Saiten zu ändern, auch merken, wie das Problem ist immer am Ende die Strings, ich glaube nicht, dass es in Groovy eingebaute Methoden gibt, die automatisch die Zeit für Sie umformatieren.

1:00 AM -> format1 

10:00 PM -> format2 

1:00AM -> format3 

1:00:00 -> format4 

13:00 -> format5 

13:00:00 -> format6 

Beispiel:

if(timeString.formatmethod()==format3){ 
    def modifiedTimeString = timeString.substring(0,3)+" AM"; 
}