Ich weiß, dass diese Frage ziemlich oft gestellt wird, und offensichtlich können Sie kein beliebiges Datum analysieren. Ich finde jedoch, dass die Python-Dateutil-Bibliothek in der Lage ist, jedes Datum zu analysieren, das ich darauf wirfe, während es absolut keinen Aufwand erfordert, eine Datumsformatzeichenfolge herauszufinden. Joda-Zeit wird immer als großartiger Java-Datums-Parser verkauft, aber Sie müssen immer noch entscheiden, in welchem Format Ihr Datum vorliegt, bevor Sie ein Format auswählen (oder ein eigenes erstellen). Sie können nicht einfach DateFormatter.parse (mydate) aufrufen und auf magische Weise ein Date-Objekt zurückerhalten.
Zum Beispiel wird das Datum "Mi Mar 04 05:09:06 GMT-06: 00 2009" ordnungsgemäß mit Python-Dateutil analysiert:
import dateutil.parser
print dateutil.parser.parse('Wed Mar 04 05:09:06 GMT-06:00 2009')
Der folgende Joda-Zeitaufruf funktioniert jedoch nicht:
String date = "Wed Mar 04 05:09:06 GMT-06:00 2009";
DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
DateTime dt = fmt.parseDateTime(date);
System.out.println(date);
Das Erstellen eines eigenen DateTimeFormatter macht den Zweck zunichte, da dies mit der Verwendung von SimpleDateFormatter mit der richtigen Formatzeichenfolge identisch zu sein scheint.
Gibt es eine vergleichbare Möglichkeit, ein Datum in Java zu analysieren, wie z. B. Python-Dateutil? Fehler sind mir egal, ich möchte nur, dass sie größtenteils perfekt sind.
03/04/2010
- 3. April 2010 oder 4. März 2010?/
Trennzeichen wird häufig zur Bezeichnung verwendetMM/dd/yyyy
(hauptsächlich in US / Englisch-Gebietsschemas). Das-
Trennzeichen wird üblicherweise zur Bezeichnung verwendetdd-MM-yyyy
(hauptsächlich in europäischen Ländern verwendet).Es gibt eine schöne Bibliothek namens Natty, die meiner Meinung nach zu Ihren Zwecken passt:
Sie können es auch online ausprobieren !
quelle
Was ich gesehen habe, ist eine Date util-Klasse, die mehrere typische Datumsformate enthält. Wenn DateUtil.parse (Datum) aufgerufen wird, versucht es, das Datum mit jedem Datumsformat intern zu analysieren, und löst nur dann Ausnahmen aus, wenn keines der internen Formate es analysieren kann.
Es ist im Grunde ein Brute-Force-Ansatz für Ihr Problem.
quelle
Sie könnten Dateparser versuchen .
Es kann jeden String automatisch erkennen und ihn korrekt und schnell in Date , Calendar , LocalDateTime , OffsetDateTime analysieren (
1us~1.5us
).Es basiert nicht auf einem
natural language analyzer
oderSimpleDateFormat
oderregex.Pattern
.Damit müssen Sie keine geeigneten Muster wie
yyyy-MM-dd'T'HH:mm:ss.SSSZ
oder vorbereitenyyyy-MM-dd'T'HH:mm:ss.SSSZZ
:Date date = DateParserUtils.parseDate("2015-04-29T10:15:00.500+0000"); Calendar calendar = DateParserUtils.parseCalendar("2015-04-29T10:15:00.500Z"); LocalDateTime dateTime = DateParserUtils.parseDateTime("2015-04-29 10:15:00.500 +00:00");
Alles funktioniert gut, bitte genießen Sie es.
quelle
Ich habe keine Ahnung, wie man in Python analysiert. In Java können wir das so machen
SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy"); java.util.Date normalDate = null; java.sql.Date sqlDate = null; normalDate = sdf1.parse(date); sqlDate = new java.sql.Date(normalDate.getTime()); System.out.println(sqlDate);
Ich denke, wie Java werden einige vordefinierte Funktionen in Python vorhanden sein. Sie können dieser Methode folgen. Diese Methode analysiert das String-Datum in SQL-Datum (TT-MM-JJJJ).
import java.text.SimpleDateFormat; import java.text.ParseException; public class HelloWorld{ public static void main(String []args){ String date ="26-12-2019"; SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy"); java.util.Date normalDate = null; java.sql.Date sqlDate = null; if( !date.isEmpty()) { try { normalDate = sdf1.parse(date); sqlDate = new java.sql.Date(normalDate.getTime()); System.out.println(sqlDate); } catch (ParseException e) { } } } }
Führen Sie dies aus!
quelle
SimpleDateFormat
Klasse zu benutzen . Zumindest nicht als erste Option. Und das nicht ohne Vorbehalt. Heute haben wir so viel besser injava.time
der modernen Java-API für Datum und Uhrzeit und derenDateTimeFormatter
.//download library: org.ocpsoft.prettytime.nlp.PrettyTimeParser String str = "2020.03.03"; Date date = new PrettyTimeParser().parseSyntax(str).get(0).getDates().get(0); System.out.println(date)
quelle