518 Stimmen

Datumsformat in einem Java-String ändern

Ich habe eine String ein Datum darstellt.

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

Ich würde es gerne in eine Date und geben sie in YYYY-MM-DD Format.

2011-01-18

Wie kann ich das erreichen?


Okay, auf der Grundlage der Antworten, die ich unten gefunden habe, habe ich folgendes ausprobiert:

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 sie gibt aus 02011-00-1 statt der gewünschten 2011-01-18 . Was mache ich falsch?

549voto

BalusC Punkte 1034465

Utilice LocalDateTime#parse() (oder ZonedDateTime#parse() wenn die Zeichenkette zufällig einen Zeitzonenteil enthält), um eine String nach einem bestimmten Muster in eine LocalDateTime .

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

Utilice LocalDateTime#format() (oder ZonedDateTime#format() ) zum Formatieren einer LocalDateTime in eine String nach einem bestimmten Muster.

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

Ou Wenn Sie noch nicht mit Java 8 arbeiten, verwenden Sie SimpleDateFormat#parse() zum Parsen einer String nach einem bestimmten Muster in eine Date .

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

Utilice SimpleDateFormat#format() zum Formatieren einer Date in eine String nach einem bestimmten Muster.

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

Siehe auch:


Update Wie bei Ihrem gescheiterten Versuch: Die Muster sind Groß- und Kleinschreibung beachten . Lesen Sie die java.text.SimpleDateFormat javadoc wofür die einzelnen Teile stehen. So steht zum Beispiel M seit Monaten und m für Minuten. Auch Jahre bestehen aus vier Ziffern yyyy , nicht fünf yyyyy . Schauen Sie sich die Codeschnipsel, die ich hier oben gepostet habe, genauer an.

178voto

Dev Punkte 6154

Bei der Formatierung wird auf Groß- und Kleinschreibung geachtet, also verwenden Sie MM für den Monat und nicht mm (das steht für die Minute) und yyyy Für Referenz können Sie folgenden Spickzettel 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

118voto

Die Antwort ist natürlich, ein SimpleDateFormat-Objekt zu erstellen und es zu verwenden, um Strings in Dates zu parsen und Dates in Strings zu formatieren. Wenn Sie SimpleDateFormat ausprobiert haben und es nicht funktioniert hat, zeigen Sie bitte Ihren Code und alle Fehler, die Sie erhalten.

Nachtrag: "mm" im Format String ist nicht dasselbe wie "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));
    }

}

32voto

89n3ur0n Punkte 871

Warum verwenden Sie nicht einfach diese

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

Das ist auch der andere Weg:

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

o

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

16voto

Vitalii Fedorenko Punkte 103468

Die Verwendung des java.time Paket 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);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X