Ich codiere das mit Groovy
Ich versuche gerade, eine Zeichenfolge, die ich habe, in ein Datum umzuwandeln, ohne etwas zu langwieriges tun zu müssen.
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 jedoch einwandfrei, wenn sich meine Zeichenfolge in Folgendes ä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 Di gibt". Ich habe versucht, ein 'E' in die Analyse für das Datum zu werfen, aber es wurde angegeben, dass das Datum nicht analysiert werden konnte.
Kann jemand erklären, wie ich das zweite Beispiel analysieren soll?
Antworten:
Das erste Argument für parse () ist das erwartete Format. Sie müssen das ändern, damit
Date.parse("E MMM dd H:m:s z yyyy", testDate)
es funktioniert. (Beachten Sie, dass Sie kein neues Datumsobjekt erstellen müssen, es ist eine statische Methode.)Wenn Sie nicht im Voraus wissen, welches Format Sie haben, müssen Sie dafür eine spezielle Analysebibliothek finden. In Ruby gibt es eine Bibliothek namens Chronic , aber mir ist kein Groovy-Äquivalent bekannt. Bearbeiten : Es gibt einen Java-Port der Bibliothek namens jChronic . Vielleicht möchten Sie ihn auschecken .
quelle
Date
, mein Freund.Versuche dies:
def date = Date.parse("E MMM dd H:m:s z yyyy", dateStr)
Hier sind die Muster zum Formatieren der Daten
quelle
Date.parse
ist veraltet . Verwenden SieDateFormat.parse()
stattdessen.Date.parse(String, String)
ist nicht in stark veraltet (was die Sprache hier verwendet wird , ist , wenn ich die Frage des Tags zu glauben , bin).JChronic ist Ihre beste Wahl. Hier ist ein Beispiel,
.fromString()
das der Date-Klasse eine 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 }
Sie können 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")
quelle
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
quelle
Als ich nach groovigen Möglichkeiten suchte, a
String
zu a zu "gießen"Date
, stieß ich auf diesen Artikel: http://www.goodercode.com/wp/intercept-method-calls-groovy-type-conversion/Der Autor verwendet Groovy metaMethods, um das Verhalten einer Klassenmethode dynamisch zu erweitern
asType
. 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 bieten eine
Convert
Klasse, die die Groovy-Komplexität umschließt und es trivial macht, eine benutzerdefinierteas
Typkonvertierung von einem beliebigen Typ zu einem anderen hinzuzufügen :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 sie niemandem empfehlen, der nicht mit den Kompromissen und Fallstricken des Bastelns mit MetaClasses vertraut ist.
quelle
Ich denke, der beste einfache Weg in diesem Fall ist die Verwendung von parseToStringDate, das Teil von GDK (Groovy JDK Enhancements) ist:
Beispiel:
println(Date.parseToStringDate("Tue Aug 10 16:02:43 PST 2010").format('MM-dd-yyyy'))
quelle
Nachfolgend sehen Sie, wie wir in unserer sich entwickelnden Anwendung vorgehen.
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 aus wie
Sun Nov 11 09:30:31 GMT 2018
In Ihrem Beispiel könnten wir etwas an Ihre Bedürfnisse anpassen. Wenn ich du wäre, würde ich 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.
quelle