2015-08-04 8 views
5
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd HH:mm:ss"); 
    System.out.println(sdf.format(new Date())); 
    SimpleDateFormat sdff = new SimpleDateFormat("MMM d HH:mm:ss"); 
    System.out.println(sdff.format(new Date())); 

Ausgang ist:Raum statt führende 0 Datum Java

Aug 04 10:58:55 
    Aug 4 10:58:55 

I ausgegeben werden soll:

Aug 04 10:58:55 
    Aug 4 10:58:55 

Irgendwelche Ideen?

Aber wenn Tag zwei Zahlen, die ich brauche es einen Raum zu haben:

Aug 14 10:58:55 
    Aug 4 10:58:55 
+0

aktuelle Ausgabe ist das gleiche wie was Sie erwarten ... also kein Problem .. Wenn Sie sich um Ausrichtung kümmern, ist es nur ein Formatierungsproblem. –

+0

@RuchiraGayanRanaweera Kami ist auf der Suche nach etwas "White-Space Padding" in einem Datumsformatierer. Schau genauer hin. – dotvav

+0

Es ist nicht ich brauche '4. August', bekommen '4. August', ein Leerzeichen statt zwei. @dotvav Wird es nicht zwei Leerzeichen machen, wenn es zwei Zahlen gibt? – Shepard

Antwort

2

Wenn Sie sich die Mühe über weißen Raum sind fügen Sie einfach ein weißer Raum Formatierer.

"MMM d HH:mm:ss" 

ZB:

Calendar calendar=Calendar.getInstance(); 
int day=calendar.get(Calendar.DAY_OF_MONTH); 
SimpleDateFormat sdf; 
if(day>9){ 
    sdf = new SimpleDateFormat("MMM dd HH:mm:ss"); 
}else{ 
    sdf = new SimpleDateFormat("MMM d HH:mm:ss"); 
} 
System.out.println(sdf.format(new Date())); 

heraus gesetzt:

Aug 4 15:50:25 
+2

Arbeit nicht, wenn es zwei Zahlen an einem Tag gibt, so wird es "11. August" sein, während ich "11. August" brauche. Formatierung zeigt es nicht lassen Sie mich meine Frage bearbeiten. – Shepard

+0

@Kami wird es nicht in beiden Fällen funktionieren. –

+1

Ich sehe deine Bearbeitung, schlau, keine Ahnung, wie ich nicht darüber nachgedacht habe. – Shepard

2

AFAIK in SimpleDateFormat kein Muster, das zu tun.

Der einfachste Weg ist der einfachste. Überprüfen Sie die Zeichenfolgenlänge und fügen Sie bei Bedarf ein zusätzliches Leerzeichen hinzu. Da alle anderen Elemente eine feste Länge haben, besteht keine Notwendigkeit für eine kompliziertere Überprüfung.

SimpleDateFormat sdff = new SimpleDateFormat("MMM d HH:mm:ss"); 
if (sdff.length == 14) { 
    sdff = sdff.substring(0,4) + " " + sdff.substring(4); 
} 

Wenn Sie es Lust (aka RegExp) wollen, ist es irgendwie ein wenig robuster, aber nicht der Mühe wert IMO

SimpleDateFormat sdff = new SimpleDateFormat("MMM d HH:mm:ss"); 
sdff = sdff.replaceAll(" (\\d) ", " $1 "); 
2

Schauen Sie sich diese Methode der SimpleDateFormat Klasse:

public StringBuffer format(Date date, StringBuffer toAppendTo, 
           FieldPosition pos) { ...} 

und bieten benutzerdefinierte FieldPosition Implementierung.

+0

Haben Sie einen Link, der erklärt, wie 'FieldPosition' funktioniert? Ich habe es immer schwer zu verstehen gefunden. – SJuan76

+0

Leider nein. Würde mich freuen, wenn jemand es findet und hier posten würde. – ka4eli

Verwandte Themen