webentwicklung-frage-antwort-db.com.de

Grooviger String bis heute

Ich codiere das mit Groovy 

Ich versuche gerade, eine Zeichenfolge, die ich habe, in ein Datum umzuwandeln, ohne etwas zu langweiliges zu tun. 

String theDate = "28/09/2010 16:02:43";
def newdate = new Date().parse("d/M/yyyy H:m:s", theDate)

Ausgabe: 

Tue Aug 10 16:02:43 PST 2010

Der obige Code funktioniert gut, wenn sich meine Zeichenfolge in etwas ändert:

String testDate = "Tue Aug 10 16:02:43 PST 2010"
def newerdate = new Date().parse("d/M/yyyy H:m:s", testDate)

Es sagt mir, dass "es keinen solchen Wert für Tue gibt". Ich habe versucht, ein "E" für das Datum in die Analyse zu werfen, aber es wurde angegeben, dass das Datum nicht analysiert werden konnte.

Kann jemand erklären, wie ich das zweite Beispiel analysieren solle?

63
StartingGroovy

Das erste Argument für parse () ist das erwartete Format. Sie müssen das in Date.parse("E MMM dd H:m:s z yyyy", testDate) ändern, damit es funktioniert. (Beachten Sie, dass Sie kein neues Date-Objekt erstellen müssen, es handelt sich um eine statische Methode.)

Wenn Sie nicht im Voraus wissen, welches Format Sie benötigen, müssen Sie eine spezielle Parsing-Bibliothek dafür finden. In Ruby gibt es eine Bibliothek namens Chronic , aber ich weiß nicht, was Groovy bedeutet. Edit: Es gibt einen Java-Port der Bibliothek mit dem Namen jChronic . Vielleicht möchten Sie ihn überprüfen.

66
Mark Thomas

Versuche dies: 

def date = Date.parse("E MMM dd H:m:s z yyyy", dateStr)

Hier sind die Muster zum Formatieren der Datumsangaben

24
gcores

JChronic ist Ihre beste Wahl. Hier ein Beispiel, das der Date-Klasse eine .fromString()-Methode hinzufügt, die fast alles analysiert, was Sie darauf werfen können:

Date.metaClass.'static'.fromString = { str ->
    com.mdimension.jchronic.Chronic.parse(str).beginCalendar.time
}

Man kann es so nennen:

println Date.fromString("Tue Aug 10 16:02:43 PST 2010")
println Date.fromString("july 1, 2012")
println Date.fromString("next tuesday")
24
ataylor

Wenn Sie nach groovigen Wegen suchen, eine String in eine Date "umzuwandeln", stieß ich auf diesen Artikel: http://www.goodercode.com/wp/intercept-method-calls-groovy-type-conversion/

Der Autor verwendet Groovy metaMethods, um das Verhalten der asType-Methode einer Klasse dynamisch zu erweitern. Hier ist der Code von der Website.

class Convert {
    private from
    private to

    private Convert(clazz) { from = clazz }
    static def from(clazz) {
        new Convert(clazz)
    }

    def to(clazz) {
        to = clazz
        return this
    }

    def using(closure) {
        def originalAsType = from.metaClass.getMetaMethod('asType', [] as Class[])
        from.metaClass.asType = { Class clazz ->
            if( clazz == to ) {
                closure.setProperty('value', delegate)
                closure(delegate)
            } else {
                originalAsType.doMethodInvoke(delegate, clazz)
            }
        }
    }
}

Sie stellen eine Convert-Klasse bereit, die die Groovy-Komplexität umschließt, wodurch das Hinzufügen benutzerdefinierter as- basierter Typkonvertierung von einem beliebigen Typ zu einem beliebigen anderen einfach wird:

Convert.from( String ).to( Date ).using { new Java.text.SimpleDateFormat('MM-dd-yyyy').parse(value) }

def christmas = '12-25-2010' as Date

Es ist eine bequeme und leistungsstarke Lösung, aber ich würde es nicht jemandem empfehlen, der nicht mit den Kompromissen und Fallstricken des MetaClass-Bastelns vertraut ist.

5
Doug Paul

Date#parse ist veraltet. Die Alternative ist: 

Java.text.DateFormat#parse 

deshalb : 

 new SimpleDateFormat("E MMM dd H:m:s z yyyy", Locale.ARABIC).parse(testDate)

Beachten Sie, dass SimpleDateFormat eine Implementierung von DateFormat ist

2
Abdennour TOUMI

Ich denke, der einfachste Weg ist in diesem Fall die Verwendung von parseToStringDate , die eine der Groovy JDK-Verbesserungen darstellt:

Eine Zeichenfolge entsprechend dem Muster EEE MMM dd HH: mm: ss zzz yyyy .__ parsen. enthält nur US-Gebietsschemakonstanten (z. B. samstags für Samstag). So ein Zeichenfolge wird von der toString-Methode von Date generiert

Beispiel:

println (Date.parseToStringDate("Tue Aug 10 16:02:43 PST 2010").format('MM-dd-yyyy'))​

Hoffe das hilft.

0
bitsnaps

Nachfolgend sehen Sie, wie wir uns in unserer Entwicklungsanwendung bewegen.

import Java.text.SimpleDateFormat

String newDateAdded = "2018-11-11T09:30:31"
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
Date dateAdded = dateFormat.parse(newDateAdded)

println(dateAdded)

Die Ausgabe sieht so aus

Sun Nov 11 09:30:31 GMT 2018

In Ihrem Beispiel könnten wir ein bisschen an Ihre Bedürfnisse anpassen. Wenn ich Sie wäre, würde ich Folgendes tun:

String datePattern = "d/M/yyyy H:m:s"
String theDate = "28/09/2010 16:02:43"
SimpleDateFormat df = new SimpleDateFormat(datePattern)
println df.parse(theDate)

Ich hoffe das würde dir sehr helfen.

0
Tung