Tengo este fragmento de código:
DateFormat formatter1; formatter1 = new SimpleDateFormat("mm/DD/yyyy"); System.out.println((Date)formatter1.parse("08/16/2011"));
Cuando ejecuto esto, obtengo esto como salida:
Sun Jan 16 00:10:00 IST 2011
Esperaba:
Tue Aug 16 "Whatever Time" IST 2011
Quiero decir que no estoy recibiendo el mes como esperaba. ¿Cuál es el error?
Prueba esto:
new SimpleDateFormat("MM/dd/yyyy")
MM
es “mes” (no mm
) dd
es “día” (no DD
) Todo está en javadoc para SimpleDateFormat
FYI, la razón por la cual su formato todavía es un formato de fecha válido es que:
mm
es “minutos” DD
es “día en año” Además, no necesita el lanzamiento hasta la Date
… ya es una Date
(o explota):
public static void main(String[] args) throws ParseException { System.out.println(new SimpleDateFormat("MM/dd/yyyy").parse("08/16/2011")); }
Salida:
Tue Aug 16 00:00:00 EST 2011
Voila!
m – min M – Meses
Letter Date or Time Component Presentation Examples G Era designator Text AD y Year Year 1996; 96 M Month in year Month July; Jul; 07 w Week in year Number 27 W Week in month Number 2 D Day in year Number 189 d Day in month Number 10 F Day of week in month Number 2 E Day in week Text Tuesday; Tue a Am/pm marker Text PM H Hour in day (0-23) Number 0 k Hour in day (1-24) Number 24 K Hour in am/pm (0-11) Number 0 h Hour in am/pm (1-12) Number 12 m Minute in hour Number 30 s Second in minute Number 55 S Millisecond Number 978 z Time zone General time zone Pacific Standard Time; PST; GMT-08:00 Z Time zone RFC 822 time zone -0800
Use la función a continuación
/** * Format a time from a given format to given target format * * @param inputFormat * @param inputTimeStamp * @param outputFormat * @return * @throws ParseException */ private static String TimeStampConverter(final String inputFormat, String inputTimeStamp, final String outputFormat) throws ParseException { return new SimpleDateFormat(outputFormat).format(new SimpleDateFormat( inputFormat).parse(inputTimeStamp)); }
El uso de la muestra es el siguiente:
try { String inputTimeStamp = "08/16/2011"; final String inputFormat = "MM/dd/yyyy"; final String outputFormat = "EEE MMM dd HH:mm:ss z yyyy"; System.out.println(TimeStampConverter(inputFormat, inputTimeStamp, outputFormat)); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); }
String newstr = "08/16/2011"; SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy"); SimpleDateFormat format = new SimpleDateFormat("EE MMM dd hh:mm:ss z yyyy"); Calendar c = Calendar.getInstance(); c.setTime(format1.parse(newstr)); System.out.println(format.format(c.getTime()));
El ejemplo muy simple es
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); Date date = new Date(); Date date1 = new Date(); try { System.out.println("Date1: "+date1); System.out.println("date" + date); date = simpleDateFormat.parse("01-01-2013"); date1 = simpleDateFormat.parse("06-15-2013"); System.out.println("Date1 is:"+date1); System.out.println("date" + date); } catch (Exception e) { System.out.println(e.getMessage()); }
puede resolver el problema de manera muy simple como Primero convierta la cadena dada al objeto de fecha, por ejemplo:
java.util.Date date1 = new Date("11/19/2015"); SimpleDateFormat formatter = new SimpleDateFormat("MMM dd yyyy HH:mma"); String format = formatter.format(date); System.out.println(format);
Este pedazo de código ayuda a convertir de ida y vuelta
System.out.println("Date: "+ String.valueOf(new Date())); SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String stringdate = dt.format(new Date()); System.out.println("String.valueOf(date): "+stringdate); try { Date date = dt.parse(stringdate); System.out.println("parse date: "+ String.valueOf(date)); } catch (ParseException e) { e.printStackTrace(); }
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu"); System.out.println(LocalDate.parse("08/16/2011", dateFormatter));
Salida:
2011-08-16
Estoy contribuyendo con la respuesta moderna. La respuesta de Bohemian es correcta y fue una buena respuesta cuando fue escrita hace 6 años. Ahora, la clase SimpleDateFormat
notoriamente problemática está obsoleta y tenemos mucho mejor en java.time
, la moderna API de fecha y hora de Java. Recomiendo encarecidamente que use esto en lugar de las antiguas clases de fecha y hora.
Cuando analizo 08/16/2011
con su fragmento, recibo Sun Jan 16 00:08:00 CET 2011
. Como el minúsculas mm
es por minutos, obtengo 00:08:00
(8 minutos después de la medianoche), y como el DD
mayúsculas es para el día del año, recibo el 16 de enero.
En java.time
también las cadenas de patrones de formato son sensibles a las mayúsculas y minúsculas, y necesitábamos usar MM
mayúscula para el mes y dd para el día del mes.
Sí, java.time
funciona muy bien en Java 6 y versiones posteriores y en dispositivos Android más antiguos y nuevos.
org.threeten.bp
con subpaquetes. java.time
. java.time
se describió por primera vez. java.time
para Java 6 y 7 (ThreeTen for JSR-310). String localFormat = android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE MMMM d"); return new SimpleDateFormat(localFormat, Locale.getDefault()).format(localMidnight);
devolverá un formato basado en el idioma del dispositivo. Tenga en cuenta que getBestDateTimePattern () devuelve “la mejor forma localizada posible del esqueleto dado para la configuración regional dada”
Usted ha usado algunos tipos de errores . Si desea establecer el 16/08/2011 en el siguiente patrón. Está mal porque,
mm significa minutos , usa MM tal como es por Meses
DD es incorrecto , debería ser dd que representa Días
Intente esto para lograr el resultado que desea obtener ( Tue Aug 16 "Whatever Time" IST 2011
),
String date = "08/16/2011"; //input date as String SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy"); // date pattern Date myDate = simpleDateFormat.parse(date); // returns date object System.out.println(myDate); //outputs: Tue Aug 16 00:00:00 IST 2011