2012-12-26 8 views
19

Sob 01 grudnia 00:00:00 GMT 2012Jak przekonwertować datę na format yyyy-MM-dd?

muszę konwertować powyżej w terminie poniżej formacie

2012-12-01

Jak mogę?

Próbowałem z następującej metody, ale jej nie działa

public Date ConvertDate(Date date){ 

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
    String s = df.format(date); 
    String result = s; 
    try { 
     date=df.parse(result); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return date; 
    } 
+2

5 znaczników daty, ale nie uważasz, że rzeczywisty język, którego używasz, był na tyle ważny, aby o nim wspomnieć? – Oded

+0

jakie jest znaczenie w tej metodzie 'public Date ConvertDate (Data daty)'? – vels4j

+0

@ vels4j jego powracająca data w formacie rrrr-MM-dd –

Odpowiedz

49

używać.

java.util.Date date = new Date("Sat Dec 01 00:00:00 GMT 2012"); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
String format = formatter.format(date); 
System.out.println(format); 

dostaniesz wyjście jako

2012-12-01 
+0

Metoda +1 i nowa metoda Date() jest przestarzała. musi używać Kalendarza zamiast: – vels4j

+5

Duży wybór nazw zmiennych. – Armada

2
String s; 
Format formatter; 
Date date = new Date(); 

// 2012-12-01 
formatter = new SimpleDateFormat("yyyy-MM-dd"); 
s = formatter.format(date); 
System.out.println(s); 
2

Nie można sformatować samego Date. Możesz uzyskać sformatowany wynik tylko w String. Użyj SimpleDateFormat, jak wspomnieli inni.

Ponadto większość getter methods in Datedeprecated.

3

UPDATE Moja odpowiedź tutaj jest nieaktualne. Projekt Joda-Time jest teraz w trybie konserwacji, zalecając migrację do klas java.time. Zobacz nowoczesne rozwiązanie w wersji Answer by Ole V.V..

Joda-Time

Przyjęty przez NidhishKrishnan odpowiedź jest poprawna.

Dla zabawy, oto ten sam rodzaj kodu w Joda-Time 2.3.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 
// import org.joda.time.*; 
// import org.joda.time.format.*; 

java.util.Date date = new Date(); // A Date object coming from other code. 

// Pass the java.util.Date object to constructor of Joda-Time DateTime object. 
DateTimeZone kolkataTimeZone = DateTimeZone.forID("Asia/Kolkata"); 
DateTime dateTimeInKolkata = new DateTime(date, kolkataTimeZone); 

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); 
System.out.println("dateTimeInKolkata formatted for date: " + formatter.print(dateTimeInKolkata)); 
System.out.println("dateTimeInKolkata formatted for ISO 8601: " + dateTimeInKolkata); 

Po uruchomieniu ...

dateTimeInKolkata formatted for date: 2013-12-17 
dateTimeInKolkata formatted for ISO 8601: 2013-12-17T14:56:46.658+05:30 
1

Nowoczesne Odpowiedź: Użycie LocalDate od java.time, nowoczesnego data i godzina Java API, a jego toString metody:

LocalDate date = LocalDate.of(2012, Month.DECEMBER, 1); // get from somewhere 
    String formattedDate = date.toString(); 
    System.out.println(formattedDate); 

Drukuje

2012-12-01

A data (czy mówimy java.util.Date lub java.time.LocalDate) nie ma formatu w nim. Wszystko, co ma, to metoda toString, która wytwarza pewien format i nie można zmienić metody toString. Na szczęście LocalDate.toString produkuje dokładnie taki format, o jaki prosiłeś.

Klasa Date jest już nieaktualna, a klasa SimpleDateFormat, z której próbowano korzystać, jest bardzo kłopotliwa.Zalecam, abyś zapomniał o tych klasach i używał zamiast tego java.time. Nowoczesne API jest o wiele przyjemniejsze w obsłudze.

Poza tym: zdarza się, że otrzymujesz Date ze starego interfejsu API, którego nie możesz zmienić lub którego nie chcesz teraz zmieniać. Najlepszą rzeczą, jaką możesz zrobić z nią to przekształcić go java.time.Instant i robić żadnych dalszych operacji stamtąd:

Date oldfashoinedDate = // get from somewhere 
    LocalDate date = oldfashoinedDate.toInstant() 
      .atZone(ZoneId.of("Asia/Beirut")) 
      .toLocalDate(); 

Należy zastąpić żądaną strefę czasową, gdyby nie stało się Azja/Bejrut. Następnie postępuj jak wyżej.

Link:Oracle tutorial: Date Time, wyjaśniając, jak korzystać z java.time.

Powiązane problemy