yyyy tipo texto obtener formato fecha dar convertir cambiar actual java string date formatting date-format

tipo - Cambiar el formato de fecha en una cadena Java



obtener fecha actual java dd/mm/yyyy (16)

Tengo una String representa una fecha.

String date_s = "2011-01-18 00:00:00.0";

Me gustaría convertirlo en una Date y YYYY-MM-DD en YYYY-MM-DD .

2011-01-18

¿Cómo puedo conseguir esto?

De acuerdo, según las respuestas que obtuve a continuación, aquí hay algo que he intentado:

String date_s = " 2011-01-18 00:00:00.0"; SimpleDateFormat dt = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss"); Date date = dt.parse(date_s); SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd"); System.out.println(dt1.format(date));

Pero genera 02011-00-1 lugar del deseado 2011-01-18 . ¿Qué estoy haciendo mal?


¿Por qué no simplemente usar este

Date convertToDate(String receivedDate) throws ParseException{ SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); Date date = formatter.parse(receivedDate); return date; }

Además, esta es la otra manera:

DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); String requiredDate = df.format(new Date()).toString();

o

Date requiredDate = df.format(new Date());

¡Aclamaciones!


Consulte "Patrones de fecha y hora" aquí. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

import java.text.SimpleDateFormat; import java.util.Date; import java.text.ParseException; public class DateConversionExample{ public static void main(String arg[]){ try{ SimpleDateFormat sourceDateFormat = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss"); Date date = sourceDateFormat.parse("2011-01-18 00:00:00.0"); SimpleDateFormat targetDateFormat = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(targetDateFormat.format(date)); }catch(ParseException e){ e.printStackTrace(); } } }


El formato es CASE-SENSITIVE, por lo tanto, USE MM para el mes no mm (esto es para el minuto) y aaaa Para la Reference puede usar la siguiente hoja de trucos.

G Era designator Text AD y Year Year 1996; 96 Y Week year Year 2009; 09 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 name in week Text Tuesday; Tue u Day number of week (1 = Monday, ..., 7 = Sunday) Number 1 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 X Time zone ISO 8601 time zone -08; -0800; -08:00

Ejemplos:

"yyyy.MM.dd G ''at'' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT "EEE, MMM d, ''''yy" Wed, Jul 4, ''01 "h:mm a" 12:08 PM "hh ''o''''clock'' a, zzzz" 12 o''clock PM, Pacific Daylight Time "K:mm a, z" 0:08 PM, PDT "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700 "yyMMddHHmmssZ" 010704120856-0700 "yyyy-MM-dd''T''HH:mm:ss.SSS''Z''" 2001-07-04T12:08:56.235-0700 "yyyy-MM-dd''T''HH:mm:ss.SSSXXX" 2001-07-04T12:08:56.235-07:00 "YYYY-''W''ww-u" 2001-W27-3


La respuesta es, por supuesto, crear un objeto SimpleDateFormat y usarlo para analizar cadenas hasta la fecha y para formatear fechas a cadenas. Si ha probado SimpleDateFormat y no ha funcionado, muestre su código y los errores que pueda recibir.

Anexo: "mm" en el formato La cadena no es lo mismo que "MM". Usa MM por meses y mm por minutos. Además, aaaa no es lo mismo que aaaa. p.ej,:

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class FormateDate { public static void main(String[] args) throws ParseException { String date_s = "2011-01-18 00:00:00.0"; // *** note that it''s "yyyy-MM-dd hh:mm:ss" not "yyyy-mm-dd hh:mm:ss" SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = dt.parse(date_s); // *** same for the format String below SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(dt1.format(date)); } }


Otras respuestas son correctas, básicamente, tenía un número incorrecto de caracteres "y" en su patrón.

Zona horaria

Sin embargo, un problema más ... No abordaste las zonas horarias. Si pretendías UTC , entonces deberías haberlo dicho. Si no, las respuestas no están completas. Si todo lo que desea es la parte de la fecha sin la hora, entonces no hay problema. Pero si realiza un trabajo adicional que puede implicar tiempo, entonces debe especificar una zona horaria.

Tiempo de joda

Este es el mismo tipo de código pero utilizando la biblioteca Joda-Time 2.3 de código abierto de terceros

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. String date_s = "2011-01-18 00:00:00.0"; org.joda.time.format.DateTimeFormatter formatter = org.joda.time.format.DateTimeFormat.forPattern( "yyyy-MM-dd'' ''HH:mm:ss.SSS" ); // By the way, if your date-time string conformed strictly to ISO 8601 including a ''T'' rather than a SPACE '' '', you could // use a formatter built into Joda-Time rather than specify your own: ISODateTimeFormat.dateHourMinuteSecondFraction(). // Like this: //org.joda.time.DateTime dateTimeInUTC = org.joda.time.format.ISODateTimeFormat.dateHourMinuteSecondFraction().withZoneUTC().parseDateTime( date_s ); // Assuming the date-time string was meant to be in UTC (no time zone offset). org.joda.time.DateTime dateTimeInUTC = formatter.withZoneUTC().parseDateTime( date_s ); System.out.println( "dateTimeInUTC: " + dateTimeInUTC ); System.out.println( "dateTimeInUTC (date only): " + org.joda.time.format.ISODateTimeFormat.date().print( dateTimeInUTC ) ); System.out.println( "" ); // blank line. // Assuming the date-time string was meant to be in Kolkata time zone (formerly known as Calcutta). Offset is +5:30 from UTC (note the half-hour). org.joda.time.DateTimeZone kolkataTimeZone = org.joda.time.DateTimeZone.forID( "Asia/Kolkata" ); org.joda.time.DateTime dateTimeInKolkata = formatter.withZone( kolkataTimeZone ).parseDateTime( date_s ); System.out.println( "dateTimeInKolkata: " + dateTimeInKolkata ); System.out.println( "dateTimeInKolkata (date only): " + org.joda.time.format.ISODateTimeFormat.date().print( dateTimeInKolkata ) ); // This date-time in Kolkata is a different point in the time line of the Universe than the dateTimeInUTC instance created above. The date is even different. System.out.println( "dateTimeInKolkata adjusted to UTC: " + dateTimeInKolkata.toDateTime( org.joda.time.DateTimeZone.UTC ) );

Cuando se ejecuta ...

dateTimeInUTC: 2011-01-18T00:00:00.000Z dateTimeInUTC (date only): 2011-01-18 dateTimeInKolkata: 2011-01-18T00:00:00.000+05:30 dateTimeInKolkata (date only): 2011-01-18 dateTimeInKolkata adjusted to UTC: 2011-01-17T18:30:00.000Z


Puede probar java 8 new date , puede encontrar más información en la documentación de Oracle .

O puedes probar el viejo

public static Date getDateFromString(String format, String dateStr) { DateFormat formatter = new SimpleDateFormat(format); Date date = null; try { date = (Date) formatter.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return date; } public static String getDate(Date date, String dateFormat) { DateFormat formatter = new SimpleDateFormat(dateFormat); return formatter.format(date); }


Solo puedes usar:

Date yourDate = new Date(); SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); String date = DATE_FORMAT.format(yourDate);

¡Funciona perfectamente!


También puedes usar subcadena ()

String date_s = "2011-01-18 00:00:00.0"; date_s.substring(0,10);

Si quieres un espacio delante de la fecha, usa

String date_s = " 2011-01-18 00:00:00.0"; date_s.substring(1,11);


Usando el paquete java.time en Java 8 y posteriores:

String date = "2011-01-18 00:00:00.0"; TemporalAccessor temporal = DateTimeFormatter .ofPattern("yyyy-MM-dd HH:mm:ss.S") .parse(date); // use parse(date, LocalDateTime::from) to get LocalDateTime String output = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(temporal);


Use LocalDateTime#parse() (o ZonedDateTime#parse() si la cadena contiene una parte de zona horaria) para analizar una String en un patrón determinado en un LocalDateTime .

String oldstring = "2011-01-18 00:00:00.0"; LocalDateTime datetime = LocalDateTime.parse(oldstring, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));

Use LocalDateTime#format() (o ZonedDateTime#format() ) para formatear LocalDateTime en una String en un determinado patrón.

String newstring = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); System.out.println(newstring); // 2011-01-18

O , cuando aún no está en Java 8, use SimpleDateFormat#parse() para analizar una String en un patrón determinado en una Date .

String oldstring = "2011-01-18 00:00:00.0"; Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(oldstring);

Use SimpleDateFormat#format() para formatear una Date en una String en un patrón determinado.

String newstring = new SimpleDateFormat("yyyy-MM-dd").format(date); System.out.println(newstring); // 2011-01-18

Ver también:

Actualización : según su intento fallido: los patrones distinguen entre mayúsculas y minúsculas . Lea el java.text.SimpleDateFormat javadoc lo que las partes individuales representan. Así que, por ejemplo, M por meses y m por minutos. Además, existen años de cuatro dígitos yyyy , no cinco yyyyy . Mire más de cerca los fragmentos de código que publiqué aquí arriba.


[editado para incluir las correcciones de BalusC] La clase SimpleDateFormat debería hacer el truco:

String pattern = "yyyy-MM-dd HH:mm:ss.S"; SimpleDateFormat format = new SimpleDateFormat(pattern); try { Date date = format.parse("2011-01-18 00:00:00.0"); System.out.println(date); } catch (ParseException e) { e.printStackTrace(); }


elimine una forma de y SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd"); debe ser SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");


String str = "2000-12-12"; Date dt = null; SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); try { dt = formatter.parse(str); } catch (Exception e) { } JOptionPane.showMessageDialog(null, formatter.format(dt));


private SimpleDateFormat dataFormat = new SimpleDateFormat("dd/MM/yyyy"); @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(value instanceof Date) { value = dataFormat.format(value); } return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); };


public class SystemDateTest { String stringDate; public static void main(String[] args) { SystemDateTest systemDateTest = new SystemDateTest(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss"); systemDateTest.setStringDate(simpleDateFormat.format(systemDateTest.getDate())); System.out.println(systemDateTest.getStringDate()); } public Date getDate() { return new Date(); } public String getStringDate() { return stringDate; } public void setStringDate(String stringDate) { this.stringDate = stringDate; } }


try { String date_s = "2011-01-18 00:00:00.0"; SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); Date tempDate=simpledateformat.parse(date_s); SimpleDateFormat outputDateFormat = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("Output date is = "+outputDateFormat.format(tempDate)); } catch (ParseException ex) { System.out.println("Parse Exception"); }