Ändern Sie das Datumsformat in einer Java-Zeichenfolge

Ich habe eine String die ein Datum darstellt.

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

Ich möchte es in ein Date umwandeln und es im Format YYYY-MM-DD ausgeben.

2011-01-18

Wie kann ich das erreichen?


Okay, basierend auf den Antworten, die ich unten erhalten habe, habe ich Folgendes versucht:

 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)); 

Aber es gibt 02011-00-1 anstelle des gewünschten 2011-01-18 . Was mache ich falsch?

    Verwenden Sie LocalDateTime#parse() (oder ZonedDateTime#parse() wenn die Zeichenfolge einen Zeitzonenteil enthält), um eine Zeichenfolge in einem bestimmten Muster in eine LocalDateTime zu LocalDateTime .

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

    Verwenden Sie LocalDateTime#format() (oder ZonedDateTime#format() ), um ein LocalDateTime in einem bestimmten Muster in einen String zu formatieren.

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

    Oder , wenn Sie noch nicht auf Java 8 sind, verwenden Sie SimpleDateFormat#parse() , um eine SimpleDateFormat#parse() in einem bestimmten Muster zu einem Date zu analysieren.

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

    Verwenden Sie SimpleDateFormat#format() um ein Date in einem String in einem bestimmten Muster zu formatieren.

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

    Siehe auch:

    • Java-String-zu-Datum-Konvertierung

    Update : Wie bei Ihrem fehlgeschlagenen Versuch: Bei den Mustern wird zwischen Groß- und Kleinschreibung unterschieden . Lesen Sie java.text.SimpleDateFormat javadoc, wofür die einzelnen Teile stehen. So steht zum Beispiel M für Monate und m für Minuten. Außerdem existieren Jahre aus vier Ziffern yyyy , nicht fünf yyyyy . Sehen Sie sich die Codeschnipsel genauer an, die ich hier oben gepostet habe.

    Die Formatierung ist CASE-SENSITIVE, also VERWENDEN SIE MM für Monat nicht mm (das ist für Minute) und JJJJ Als Referenz können Sie folgenden Cheatsheet verwenden.

     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 

    Beispiele:

     "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 

    Die Antwort ist natürlich, ein SimpleDateFormat-Objekt zu erstellen und es zum Analysieren von Strings to Date und zum Formatieren von Dates in Strings zu verwenden. Wenn Sie SimpleDateFormat ausprobiert haben und es nicht funktioniert hat, zeigen Sie bitte Ihren Code und eventuelle Fehler an.

    Zusatz: “mm” im Format String ist nicht gleich “MM”. Verwenden Sie MM für Monate und mm für Minuten. Außerdem ist yyyyy nicht dasselbe wie yyyy. z.B,:

     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)); } } 

    Warum nicht einfach das benutzen?

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

    Auch das ist der andere Weg:

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

    oder

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

    Prost!

    Verwendung des Pakets java.time in Java 8 und höher:

     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); 

    [bearbeitet, um die Korrekturen von BalusC einzuschließen] Die SimpleDateFormat- class sollte den Trick machen:

     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(); } 
     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"); } 

    Bitte beachten Sie hier “Datum und Uhrzeit Muster”. 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(); } } } 

    Andere Antworten sind korrekt, im Grunde hatten Sie die falsche Anzahl von “y” -Zeichen in Ihrem Muster.

    Zeitzone

    Noch ein Problem … Sie haben keine Zeitzonen angesprochen. Wenn Sie UTC beabsichtigten, dann sollten Sie dies gesagt haben. Wenn nicht, sind die Antworten nicht vollständig. Wenn alles, was Sie wollen, ist der Datumsteil ohne die Zeit, dann kein Problem. Wenn Sie jedoch weitere Arbeiten ausführen, die Zeit erfordern, sollten Sie eine Zeitzone angeben.

    Joda-Zeit

    Hier ist die gleiche Art von Code, aber mit der Open-Source- Joda-Time 2.3-Bibliothek von Drittanbietern

     // © 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 ) ); 

    Wenn es läuft …

     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 
      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)); 

    Sie können auch substring () verwenden

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

    Wenn Sie ein Leerzeichen vor dem Datum haben möchten, verwenden Sie

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

    Sie können einfach verwenden:

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

    Es funktioniert perfekt!

     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); }; 

    entferne ein y Formular SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd"); sollte SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");

    Sie könnten Java 8 neues date versuchen, weitere Informationen finden Sie in der Oracle-Dokumentation .

    Oder Sie können das alte versuchen

     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); }