2012-05-27 13 views
23

Chcę tylko datę, aby pokazać się tak:Formatowanie daty kalendarzowej

Saturday, May 26, 2012 at 10:42 PM

Oto mój kod do tej pory:

Calendar calendar = Calendar.getInstance(); 
String theDate = calendar.get(Calendar.MONTH) + " " + calendar.get(Calendar.DAY_OF_MONTH) + " " + calendar.get(Calendar.YEAR); 

lastclick.setText(getString(R.string.lastclick) + " " + theDate); 

To pokazuje numery na miesiąc, dzień, i rok, ale czy jest lepszy sposób na zrobienie tego? Czy nie ma prostego sposobu robienia tego, jak używanie funkcji PHP date()?

+1

tak. nie rozumiem, dlaczego to jest takie trudne. – scarhand

Odpowiedz

14

Skorzystaj z poniższego, aby sformatować datę zgodnie z wymaganiami. Patrz ten LINK

Calendar calendar = Calendar.getInstance(); 
lastclick.setText(getString(R.string.lastclick) + " " + String.format("%1$tA %1$tb %1$td %1$tY at %1$tI:%1$tM %1$Tp", calendar)); 

gdzie% 1 $ tA dla staurday, % 1 $ tb do maja

i tak dalej ...

+1

Przypadkowo go przegłosowałem, ale wydaje mi się, że nie jestem w stanie usunąć mojego wystąpienia bez obalenia, co nie jest konieczne. Ten działa, ale ten poniżej jest prostszy i łatwiejszy do odczytania. – craned

71
Calendar calendar = Calendar.getInstance(); 
SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM d, yyyy 'at' h:mm a"); 
System.out.println(format.format(calendar.getTime())); 

Uruchomienie powyższego kodu powoduje wyprowadzenie bieżącego czasu (np. Saturday, May 26, 2012 at 11:03 PM).

Aby uzyskać więcej informacji, patrz Android documentation for SimpleDateFormat.

Specyfikacja formatu SimpleDateFormat jest podobna do tej z date funkcji PHP:

echo date("l, M j, Y \a\\t g:i A"); 

Masz rację. W porównaniu do kodu Java kod PHP jest znacznie bardziej zwięzły.

+0

Twój kod generuje określony format, który chciał zapytać, ale co zrobić, jeśli chcę, aby format został ustawiony zgodnie z ustawieniami systemu użytkownika? W systemie Windows kod C# DateTime.ToLongDateString() generuje to. Co jeśli chcę osiągnąć to samo na Androidzie? –

+1

Zobacz moją odpowiedź na rozwiązanie, które zawiera locale. – String

10

To jest rzeczywiście dość subtelne problemu, aby uzyskać prawo , a ja nie widziałem innej odpowiedzi tutaj na SO, która dotyczy zarówno:

  • strefy czasowej Calendar „s (co oznacza, że ​​może on być widoczny inny termin niż LO cal)
  • urządzenia Locale (co wpływa na „właściwą” drogę do formatowania dat)

Dotychczasowe odpowiedzi na to pytanie ignorowanych regionie, a inne odpowiedzi, które dotyczą konwersji na Date zignorować strefę czasową. Więc tutaj jest bardziej kompletny, ogólne rozwiązanie:

Calendar cal = Calendar.getInstance(); // the value to be formatted 
java.text.DateFormat formatter = java.text.DateFormat.getDateInstance(
     java.text.DateFormat.LONG); // one of SHORT, MEDIUM, LONG, FULL, or DEFAULT 
formatter.setTimeZone(cal.getTimeZone()); 
String formatted = formatter.format(cal.getTime()); 

Należy pamiętać, że trzeba użyć java.text.DateFormat tutaj, nie Android własnego (łudząco nazwie) android.text.format.DateFormat.