Comment puis-je obtenir la date actuelle dans Android?


165

J'ai écrit le code suivant

Date d = new Date();
CharSequence s  = DateFormat.format("MMMM d, yyyy ", d.getTime());

Mais me demande un paramètre, je veux la date actuelle au format chaîne,

comme

28-Dec-2011

pour que je puisse me remettre TextView,

expliquez un peu, si vous pensez que quelque chose est nécessaire, je suis nouveau dans le développement Android.


1
Bien que l'utilisation de la DateFormatclasse était correcte lorsque cette question a été posée en 2011, cette classe et sa sous SimpleDateFormat- classe étaient toujours gênantes et sont maintenant obsolètes depuis longtemps. Je vous recommande de ne pas les utiliser et de regarder plutôt dans java.time, l'API de date et d'heure Java moderne .
Ole VV

Réponses:


389

Vous pouvez utiliser la SimpleDateFormatclasse pour mettre en forme la date dans le format souhaité.

Vérifiez simplement ce lien où vous avez une idée de votre exemple.

Par exemple:

String dateStr = "04/05/2010"; 
 
SimpleDateFormat curFormater = new SimpleDateFormat("dd/MM/yyyy"); 
Date dateObj = curFormater.parse(dateStr); 
SimpleDateFormat postFormater = new SimpleDateFormat("MMMM dd, yyyy"); 
 
String newDateStr = postFormater.format(dateObj); 

Mettre à jour:

L'exemple détaillé est ici , je vous suggère de parcourir cet exemple et de comprendre le concept de classe SimpleDateFormat.

Solution finale:

Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault());
String formattedDate = df.format(c);

vous souhaiterez peut-être utiliser la méthode System.currentTimeMillis () ou la classe Data à la place de la classe Calendar. Ça devrait être plus rapide. stackoverflow.com/questions/368094/…
cjayem13

Cela nécessite l'API 24!
eine

Pour info, les classes de date-heure terriblement gênantes telles que java.util.Date, java.util.Calendaret java.text.SimpleDateFormatsont maintenant héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures. Voir le didacticiel d'Oracle .
Basil Bourque

@ueen Veuillez importer depuis le package java et non depuis Android.
Sadda Hussain

Travaux amendes? Actuellement? (2020)
luke cross

152

Son code d' une ligne simple pour obtenir la date actuelle dans ce format aaaa-MM-jj , vous pouvez utiliser le format que vous voulez:

String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());

7
Vous devez le changer en: String currentDate = new SimpleDateFormat ("jj-MM-aaaa", Locale.getDefault ()). Format (new Date ());
Bart Burg

1
Wow merci! Cela a fonctionné, même si je pense avoir découvert pourquoi la date sur mon appareil virtuel était affichée un jour avant, probablement parce que la date sur la machine virtuelle n'était pas correcte. Testé sur un téléphone réel, cela a fonctionné à merveille. Alors , merci @Pratik
wesley Franks

30

Cela n'a rien à voir avec Android car il est basé sur Java, vous pouvez donc utiliser

private String getDateTime() { 
   DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
   Date date = new Date(); 
   return dateFormat.format(date); 
}

Il y a des erreurs, new Date () demande des arguments, et vous initialisez le DateFormat avec SimpleDateFormat, également non valide
Chatar Veer Suthar

12
 public String giveDate() {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM d, yyyy");
    return sdf.format(cal.getTime());
 }

11

essaye ça,

SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date myDate = new Date();
String filename = timeStampFormat.format(myDate);

il dit ajouter des arguments à la nouvelle date (longue)
Chatar Veer Suthar

dans new Date (), il ne peut pas demander de paramètre long.
Lucifer

Pourquoi utilisez-vous le keywork privé, exécutez votre code dans un projet Android, obtenez-vous la sortie?
Chatar Veer Suthar

veuillez supprimer ce "privé". oui je reçois la sortie, je vois votre discussion. Je ne sais pas pourquoi vous rencontrez des problèmes pour une requête très simple.
Lucifer

7
CharSequence s  = DateFormat.getDateInstance().format("MMMM d, yyyy ");

Vous avez d'abord besoin d'une instance


getDateInstance, ne reconnaissant pas cela
Chatar Veer Suthar

si vous regardez les documents java, cela devrait être, docs.oracle.com/javase/6/docs/api/java/text/… , java.util.Locale)
Marthyn Olthof

@Veer, si vous avez accidentellement importé android.text.format.DateFormat au lieu de java.text.DateFormat, getDateInstance () ne sera pas reconnu
gcbound

7

Fonctionne comme un charme et se convertit en String en bonus;)

SimpleDateFormat currentDate = new SimpleDateFormat("dd/MM/yyyy");
      Date todayDate = new Date();
    String thisDate = currentDate.format(todayDate);

5
 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

// importer la classe de date en tant que java.util



4
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String date = df.format(Calendar.getInstance().getTime());

4

J'apporte la réponse moderne.

java.time et ThreeTenABP

Pour obtenir la date actuelle:

    LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));

Cela vous donne un LocalDateobjet, que vous devez utiliser pour conserver une date dans votre programme. UNELocalDate est une date sans heure de la journée.

Uniquement lorsque vous devez afficher la date à un utilisateur, formatez-la dans une chaîne adaptée aux paramètres régionaux de l'utilisateur:

    DateTimeFormatter userFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
    System.out.println(today.format(userFormatter));

Lorsque j'ai exécuté cet extrait aujourd'hui dans les paramètres régionaux anglais américains, la sortie était:

13 juillet 2019

Si vous voulez qu'il soit plus court, spécifiez FormatStyle.MEDIUMou même FormatStyle.SHORT. DateTimeFormatter.ofLocalizedDateutilise les paramètres régionaux de mise en forme par défaut, le fait est donc qu'il donnera une sortie adaptée à ces paramètres régionaux, différente pour différents paramètres régionaux.

Si votre utilisateur a des exigences très particulières pour le format de sortie, utilisez une chaîne de modèle de format:

    DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
            "d-MMM-u", Locale.forLanguageTag("ar-AE"));

13-يول -2019

J'utilise et je recommande java.time, l'API de date et d'heure Java moderne. DateFormat, SimpleDateFormat, DateEt Calendarutilisé dans la question et / ou plusieurs des autres réponses, sont mal conçus et dépassée depuis longtemps. Et java.time est tellement plus agréable à utiliser.

Question: Puis-je utiliser java.time sur Android?

Oui, java.time fonctionne bien sur les appareils Android plus anciens et plus récents. Il nécessite juste au moins Java 6 .

  • Dans Java 8 et versions ultérieures et sur les appareils Android plus récents (à partir du niveau d'API 26), l'API moderne est intégrée.
  • Dans Java 6 et 7, obtenez le ThreeTen Backport, le backport des classes modernes (ThreeTen pour JSR 310; voir les liens en bas).
  • Sur Android (plus ancien), utilisez l'édition Android de ThreeTen Backport. Il s'appelle ThreeTenABP. Et assurez-vous d'importer les classes de date et d'heure à partir des org.threeten.bpsous-packages.

Liens


Très bonne réponse! Mais comment puis-je convertir ThreeTen LocalDateTime en date? J'utilise Firebase et une condition préalable à l'enregistrement de l'horodatage est l'objet Date.
H.Karatsanov le

@ H.Karatsanov Si vous utilisez le backport: DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Si vous utilisez le java.time intégré: Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Voir Conversion entre java.time.LocalDateTime et java.util.Date . La réponse faisant autorité de JodaStephen est là, ainsi qu'une réponse montrant l'utilisation du backport .
Ole VV

4
 public static String getcurrentDateAndTime(){

        Date c = Calendar.getInstance().getTime();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        String formattedDate = simpleDateFormat.format(c);
        return formattedDate;
    }

// String currentdate=  getcurrentDateAndTime();

Cela contribue-t-il à quelque chose de substantiel à la question ( je veux la date du jour au format chaîne, par exemple28-Dec-2011 ) qui ne figure pas déjà dans les autres réponses? Dans tous les cas, il utilise toujours la SimpleDateFormatclasse notoirement gênante et obsolète depuis longtemps . S'il vous plaît, nous n'avons plus besoin de réponses pour cela.
Ole VV

cela fonctionne pour les meilleures pratiques ajoutez le deuxième paramètre locale SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("aaaa / MM / jj", Locale.ENGLISH);
Rucha Bhatt Joshi le

3
Calendar cal = Calendar.getInstance();      
Calendar dt = Calendar.getInstance(); 
dt.clear();
dt.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),cal.get(Calendar.DATE)); 
return dt.getTime();        

3

Une simple modification de la solution de Paresh:

Date date = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(date);

3
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
int month = c.get(Calendar.MONTH);
int year = c.get(Calendar.YEAR);
String date = day + "/" + (month + 1) + "/" + year;

Log.i("TAG", "--->" + date);

2

Vous pouvez utiliser le code suivant pour obtenir une date au format souhaité.

String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));

Belle doublure et fonctionne sur les Sdks inférieurs. Quelques caractères plus courts DateFormat.format ("jj-MM-aaaa", nouveau java.util.Date ()). ToString ()
Jeffrey

1
Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(c);

Celui-ci est la meilleure réponse ...


0

Le moyen le plus simple d'obtenir la date actuelle dans les paramètres régionaux actuels (paramètres régionaux de l'appareil!):

String currentDate = DateFormat.getDateInstance().format(Calendar.getInstance().getTime());

Si vous voulez avoir la date dans différents styles, utilisez getDateInstance(int style):

DateFormat.getDateInstance(DateFormat.FULL).format(Calendar.getInstance().getTime());

D' autres styles: DateFormat.LONG, DateFormat.DATE_FIELD, DateFormat.DAY_OF_YEAR_FIELD, etc. (utilisation CTRL+Spacevoir tous)

Si vous avez également besoin de temps:

String currentDateTime = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.LONG).format(Calendar.getInstance().getTime());

0
  public static String getDateTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM dd, yyyy HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return simpleDateFormat.format(date);
    }

0

essayez avec ce lien de code, c'est une réponse absolument correcte pour tous les cas à la date et à l'heure. ou personnalisez la date et l'heure selon les besoins et les exigences de l'application.

essayez avec ce lien. essayez avec ce lien


0

J'ai écrit une application de calendrier à l'aide de CalendarView et c'est mon code:

CalendarView cal = (CalendarView) findViewById(R.id.calendar);
cal.setDate(new Date().getTime());

Le champ «calendrier» est mon CalendarView. Importations:

import android.widget.CalendarView;
import java.util.Date;

J'ai la date actuelle sans erreur.


0

C'est le code que j'ai utilisé:

             Date date = new Date();  // to get the date
             SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy"); // getting date in this format
             String formattedDate = df.format(date.getTime());
             text.setText(formattedDate);

0

J'ai déjà utilisé ceci:

Date What_Is_Today=Calendar.getInstance().getTime();
SimpleDateFormat Dateformat = new SimpleDateFormat("dd-MM-yyyy");
String Today=Dateformatf.format(What_Is_Today);

Toast.makeText(this,Today,Toast.LENGTH_LONG).show();

au début, je reçois l'heure, puis j'ai déclaré un format de date simple (pour obtenir une date comme: 19-6-2018) puis j'utilise le format pour changer la date en chaîne.


0

juste un code de ligne pour obtenir un format de date simple:

SimpleDateFormat.getDateInstance().format(Date())

sortie: 18-mai-2020

SimpleDateFormat.getDateTimeInstance().format(Date())

sortie: 18-mai-2020 11:00:39 AM

SimpleDateFormat.getTimeInstance().format(Date())

sortie: 11:00:39 AM

J'espère que cette réponse est suffisante pour obtenir ce format de date et d'heure ... :)


Veuillez ne pas apprendre aux jeunes à utiliser les cours SimpleDateFormatet les DateFormatcours dépassés depuis longtemps et notoirement gênants . Du moins pas comme première option. Et pas sans aucune réserve. Aujourd'hui, nous avons tellement mieux dans java.timel'API de date et d'heure Java moderne, et ses DateTimeFormatter. Oui, vous pouvez l'utiliser sur Android. Pour les anciens appareils Android, consultez Comment utiliser ThreeTenABP dans Android Project .
Ole VV

-1

Voici le code que j'ai utilisé :

final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);

// Set current date into textview
tvDisplayDate.setText(new StringBuilder()
    .append(month + 1).append("-") // Month is 0 based, add 1
    .append(day).append("-")
    .append(year).append("   Today is :" + thursday ) );

// Set current date into datepicker
dpResult.init(year, month, day, null);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.