Sé que esta pregunta se hace bastante y, obviamente, no se puede analizar ninguna fecha arbitraria. Sin embargo, encuentro que la biblioteca python-dateutil es capaz de analizar cada fecha que le lanzo, todo mientras no requiere absolutamente ningún esfuerzo para averiguar una cadena de formato de fecha. El tiempo de Joda siempre se vende como un gran analizador de fechas de Java, pero aún requiere que decidas en qué formato está tu fecha antes de elegir un formato (o crear el tuyo propio). No puede simplemente llamar a DateFormatter.parse (mydate) y mágicamente recuperar un objeto Date.
Por ejemplo, la fecha "Wed Mar 04 05:09:06 GMT-06: 00 2009" se analiza correctamente con python-dateutil:
import dateutil.parser
print dateutil.parser.parse('Wed Mar 04 05:09:06 GMT-06:00 2009')
pero la siguiente llamada de tiempo de Joda no funciona:
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);
Y crear su propio DateTimeFormatter frustra el propósito, ya que parece ser lo mismo que usar SimpleDateFormatter con la cadena de formato correcta.
¿Existe una forma comparable de analizar una fecha en Java, como python-dateutil? No me importan los errores, solo quiero que sea casi perfecto.
03/04/2010
significa: 3 de abril de 2010 o 4 de marzo de 2010?/
separador se usa comúnmente para denotarMM/dd/yyyy
(se usa principalmente en configuraciones regionales de EE. UU. / Inglés). El-
separador se usa comúnmente para denotardd-MM-yyyy
(se usa principalmente en configuraciones regionales europeas).Hay una bonita biblioteca llamada Natty que creo que se adapta a tus propósitos:
¡También puedes probarlo en línea !
fuente
Lo que he visto es una clase de utilidad de fecha que contiene varios formatos de fecha típicos. Entonces, cuando se llama a DateUtil.parse (fecha), intenta analizar la fecha con cada formato de fecha internamente y solo arroja excepciones si ninguno de los formatos internos puede analizarlo.
Es básicamente un enfoque de fuerza bruta para su problema.
fuente
Puedes probar el analizador de fechas .
Puede reconocer cualquier Cadena automáticamente y analizarla en Fecha , Calendario , LocalDateTime , OffsetDateTime de forma correcta y rápida (
1us~1.5us
).No se basa en ninguna
natural language analyzer
oSimpleDateFormat
oregex.Pattern
.Con él, no tiene que preparar ningún patrón apropiado como
yyyy-MM-dd'T'HH:mm:ss.SSSZ
oyyyy-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");
Todo funciona bien, disfrútalo.
fuente
No tengo idea sobre este análisis de cómo hacerlo en Python. En java podemos hacer así
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);
Creo que, como Java, algunas funciones predefinidas estarán allí en Python. Puedes seguir este método. Estos métodos analizan la fecha de la cadena en Sql Date (dd-MM-aaaa);
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) { } } } }
ejecutar esto!
fuente
SimpleDateFormat
clase obsoleta y notoriamente problemática . Al menos no como primera opción. Y no sin reserva alguna. Hoy tenemos mucho mejor enjava.time
, la API moderna de fecha y hora de Java, y suDateTimeFormatter
.//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)
fuente