web-dev-qa-db-fra.com

Formatage d'une date de calendrier

Je veux juste que la date apparaisse comme ceci:

Saturday, May 26, 2012 at 10:42 PM

Voici mon code jusqu'à présent:

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

Cela montre les chiffres du mois, du jour et de l'année, mais il doit y avoir une meilleure façon de le faire? N'y a-t-il pas un moyen simple de le faire, comme utiliser la fonction date() de PHP?

31
scarhand

Utilisez ce qui suit pour formater la date comme requis. Reportez-vous à cette LIEN

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

Où% 1 $ tA pour Staurday,% 1 $ tb pour mai,

etc...

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

L'exécution du code ci-dessus génère l'heure actuelle (par exemple, Saturday, May 26, 2012 at 11:03 PM).

Voir la documentation Android pour SimpleDateFormat pour plus d'informations.

La spécification de format de SimpleDateFormat est similaire à celle de la fonction date de PHP:

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

Tu as raison. Comparé au code Java, le code PHP est beaucoup plus succinct).

93
creemama

C'est en fait un problème assez subtil pour aller de l'avant, et je n'ai pas vu d'autre réponse ici sur SO qui traite à la fois:

  • Le fuseau horaire de Calendar (ce qui signifie qu'il peut afficher une date différente de l'heure locale)
  • Locale de l'appareil (qui affecte la "bonne" façon de formater les dates)

Les réponses précédentes à cette question ignorent les paramètres régionaux et les autres réponses qui impliquent une conversion en Date ignorent le fuseau horaire. Voici donc une solution générale plus complète:

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());

Notez que vous devez utiliser Java.text.DateFormat ici, pas à Android (nom déroutant) Android.text.format.DateFormat.

13
String