wake-up-neo.com

Ändern Sie das Datumsformat in einer Java Zeichenfolge

Ich habe ein String, das ein Datum darstellt.

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

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

2011-01-18

Wie kann ich das erreichen?


Okay, basierend auf den Antworten, die ich unten abgerufen 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 aus. Was mache ich falsch?

451
amit4444

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

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 ein String in einem bestimmten Muster zu formatieren.

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

Oder : Wenn Sie noch nicht mit Java 8 arbeiten, verwenden Sie SimpleDateFormat#parse() , um String in einem bestimmten zu analysieren Muster in ein Date.

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 ein 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:


Update : Gemäß Ihrem fehlgeschlagenen Versuch: Bei den Mustern wird zwischen Groß- und Kleinschreibung unterschieden . Lesen Sie das 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 bestehen Jahre aus vier Ziffern yyyy und nicht aus fünf yyyyy. Schauen Sie sich die Code-Schnipsel genauer an, die ich hier oben gepostet habe.

493
BalusC

Die Formatierung ist CASE-SENSITIVE. Verwenden Sie also MM für Monat und nicht mm (dies ist für Minute) und JJJJ. Für Referenz können Sie das folgende 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
152
Dev

Die Antwort besteht natürlich darin, ein SimpleDateFormat-Objekt zu erstellen und es zum Parsen von Zeichenfolgen in Datum und zum Formatieren von Datumsangaben in Zeichenfolgen zu verwenden. Wenn Sie SimpleDateFormat ausprobiert haben und es nicht funktioniert hat, zeigen Sie bitte Ihren Code und eventuelle Fehler an.

Nachtrag: "mm" im Format String ist nicht gleich "MM". Verwenden Sie MM für Monate und mm für Minuten. Außerdem ist JJJJJ nicht dasselbe wie JJJJ. 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 nutzen?

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

Dies ist auch 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!

22
89n3ur0n

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

Andere Antworten sind richtig, im Grunde hatten Sie die falsche Anzahl von "y" -Zeichen in Ihrem Muster.

Zeitzone

Ein weiteres Problem… Sie haben keine Zeitzonen angesprochen. Wenn Sie UTC beabsichtigt haben, dann sollten Sie das gesagt haben. Wenn nicht, sind die Antworten nicht vollständig. Wenn alles, was Sie wollen, der Datumsanteil ohne die Uhrzeit ist, dann ist dies kein Problem. Wenn Sie jedoch weitere zeitaufwendige Arbeiten ausführen, sollten Sie eine Zeitzone angeben.

Joda-Zeit

Dies ist die gleiche Art von Code, jedoch unter Verwendung der Open-Source-Bibliothek Joda-Time 2.3 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 ) );

Beim Laufen ...

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
9
Basil Bourque

Die SimpleDateFormat Klasse 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();
}
9
Bryan

Bitte lesen Sie "Datums- und Zeitmuster" hier. 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();
    }
  } 

}
9
Touchstone
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");
  }
8
Fathah Rehman P
public class SystemDateTest {

    String stringDate;

    public static void main(String[] args) {
        SystemDateTest systemDateTest = new SystemDateTest();
        // format date into String
        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;
    }
}
7
Neeraj Gahlawat
   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));
6
Eren

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

6
cнŝdk

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 wünschen, verwenden Sie

String date_s = " 2011-01-18 00:00:00.0";
date_s.substring(1,11);
5
Martin
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);
};
4
user2632575

Sie können Java 8 neue date ausprobieren. Weitere Informationen finden Sie in der Oracle-Dokumentation .

Oder Sie können das alte probieren

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);
    }
3
Ran Adler

entferne eine y Form SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd"); sollte SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd"); sein

3
Pankaj Sharma

Angenommen, Sie möchten das Datumsformat von 2019-12-20 10:50 GMT + 6: 00 auf 2019-12-20 10:50 GMT ändern. Als erstes müssen Sie das Datumsformat verstehen. Ein Datumsformat ist JJJJ-MM-TT hh : mm a zzz und das zweite Datumsformat sind JJJJ-MM-TT hh: mm a

gib einfach einen String aus dieser Funktion wie.

public String convertToOnlyDate(String currentDate) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm a ");
    Date date;
    String dateString = "";
    try {
        date = dateFormat.parse(currentDate);
        System.out.println(date.toString()); 

        dateString = dateFormat.format(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return dateString;
}

Diese Funktion gibt Ihre Wunschantwort zurück. Wenn Sie mehr anpassen möchten, fügen Sie einfach eine Komponente zum Datumsformat hinzu oder entfernen Sie sie.

0
pavel

SimpleDateFormat dt1 = new SimpleDateFormat ("JJJJ-MM-TT");

0