Apprendre le développement Java pour Android Notions de base sur la date et l'heure

Dans ce didacticiel, vous apprendrez à utiliser les dates et les heures en Java et dans les applications Android. Les données de date et d’heure peuvent être déterminées, modifiées et stockées de différentes façons..

Les applications Android sont écrites en Java, un langage de programmation. Java comporte un certain nombre de types de données primitifs pour différents types de nombres (nombres entiers, flottants, etc.), des valeurs booléennes et des caractères uniques. Java comprend également de nombreuses classes pour stocker, formater et modifier les données de date et d'heure à utiliser dans vos applications Android. Dans ce didacticiel, vous apprendrez à déterminer la date et l'heure actuelles, à stocker des données de date et d'heure et à les afficher de différentes manières..

Ce dont vous aurez besoin

Techniquement, vous n'avez besoin d'aucun outil pour compléter ce didacticiel, mais vous en aurez certainement besoin pour développer des applications Android..

Pour développer des applications Android (ou des applications Java, d'ailleurs), vous avez besoin d'un environnement de développement pour écrire et créer des applications. Eclipse est un environnement de développement (IDE) très populaire pour Java et l'IDE préféré pour le développement Android. Il est disponible gratuitement pour les systèmes d'exploitation Windows, Mac et Linux..

Pour des instructions complètes sur l'installation d'Eclipse (y compris les versions prises en charge) et le SDK Android, voir le site Web du développeur Android..

Qu'est-ce qu'une date ou une heure, vraiment?

Tout d’abord: la date et l’heure sont fondamentalement deux parties d’un même fichier de données (un point dans le temps). Lorsqu'il s'agit de stocker des dates et des heures sur un ordinateur, il peut être utile de revenir à votre premier cours d'informatique et de rappeler que toutes les données sur un ordinateur sont constituées de “uns et de zéros”. Les ordinateurs (et les appareils Android ne font pas exception) n'ont pas vraiment le sens du temps, mais conservent plutôt une représentation numérique de la date ou de l'heure actuelles (toujours en avant, une milliseconde à la fois), puis formatent ces informations en différentes façons pour répondre à des objectifs spécifiques. Après tout, un seul instant dans le temps est interprété différemment selon votre fuseau horaire ou votre lieu de résidence, que vous (ou votre région) reconnaissiez ou non l'heure avancée, et divers autres facteurs..

Ajoutez à cela que les dates et les heures sont affichées différemment selon les cultures et les lieux. Par exemple, aux États-Unis, nous formatons souvent nos dates comme ceci: le 6 avril 1981 ou le 04/06/1981 alors qu'en Europe, le jour précède normalement le mois, comme ceci: le 6 avril 1981 ou le 06/04 / 1981. De même, certains pays ont le concept AM et PM 12 heures, alors que d’autres utilisent simplement une horloge 24 heures..

Les ordinateurs, y compris les appareils Android, calculent les heures et les dates sous forme d'un nombre unique (un nombre long), qui augmente avec le temps. Le nombre lui-même correspond au nombre de millisecondes écoulées depuis une date spécifique passée. Dans ce cas, l'heure à laquelle «l'heure» a commencé à courir est: minuit, le 1er janvier 1970. Ce mécanisme est appelé heure Unix ou heure POSIX..

Qu'est-ce qu'un développeur à faire?

Pop quiz! Laquelle des chaînes suivantes représente correctement le 4ème mois de l'année civile (grégorienne): A, avril, avril, avril, 4 ou 04? La réponse? Tous. Déjà, travailler avec des dates et des heures semble un peu compliqué, n'est-ce pas? En fait, nous avons effectué une lecture rapide de tous les ouvrages de référence sur Java de notre bureau (ce qui n’était pas superficiel) et très peu de dates de couverture et d’heures de manière substantielle. Mais ne paniquez pas. Acceptez simplement le fait qu’en tant que développeur, vous devrez déployer des efforts considérables pour atteindre deux objectifs:

1. Votre objectif externe: permettre à l’utilisateur de travailler avec les formats de date et d’heure avec lesquels il est le plus à l'aise, ou du moins familiarisés avec.
2. Votre objectif interne: conserver le code de votre application indépendamment du format, de sorte qu'il fonctionne partout avec peu de tracas..

Parlons maintenant un peu de chacun de ces objectifs..

L'objectif externe: être flexible et utiliser les contrôles standard

Avez-vous déjà remarqué que peu de sites Web de voyages permettent à l'utilisateur de saisir manuellement la date ou l'heure? Au lieu de cela, ils se fient aux sélecteurs de calendrier et aux listes déroulantes fixes du jour, du mois et de l’année ou, au minimum, appliquent un format de date spécifique (généralement lié à votre langue / pays, qu’ils demandent à l’avance). Du point de vue de l'interface utilisateur, vos applications doivent respecter les nuances de date et d'heure, du moins dans une certaine mesure. Cependant, vous devez également examiner attentivement les méthodes permettant à l'utilisateur de saisir les informations de date et d'heure. En utilisant des sélecteurs de date et d’heure standard dans vos applications Android, tels que DatePicker et TimePicker, vous limitez efficacement la possibilité que les utilisateurs puissent saisir des données pouvant être facilement converties en structures de date et d’heure appropriées, sans avoir à analyser tous les formats connus mentionner ses typos).

L'objectif interne: garder vos dates et heures génériques

Du point de vue du code interne, vos applications doivent utiliser une représentation date / heure générique qui ne repose pas sur ces nuances..

En Java, les dates et les heures sont stockées de plusieurs manières, en fonction de vos besoins..

  • Le type long est un type de données primitif capable de stocker le nombre de millisecondes écoulées depuis un instant donné (temps Unix).
  • La classe Date (java.util.Date) est une classe d’utilitaires permettant de stocker la date et l’heure d’une manière qui peut être manipulée de manière raisonnable sans avoir à penser constamment au temps en millisecondes..
  • La classe Calendar (java.util.Calendar) est une classe utilitaire permettant de travailler avec différents calendriers, ainsi que de manipuler les informations de date et d'heure de différentes manières..
  • La classe GregorianCalendar (une sous-classe de java.util.Calendar) est principalement utilisée pour la manipulation des dates dans l'hémisphère occidental. Nous utilisons un calendrier de 12 mois, de 7 jours à une semaine et de deux époques (BC et AD)..

Détermination de la date et de l'heure actuelles

Il existe plusieurs façons de déterminer l'heure actuelle sur un appareil Android..

Vous pouvez déterminer les données de date et heure brutes à l'aide de la méthode statique fournie dans la classe System (java.lang.System):

 long msTime = System.currentTimeMillis (); Date curDateTime = new Date (msTime); 

Cette méthode repose sur le temps que le périphérique pense c'est, qui peut ou peut ne pas être fiable. Une autre façon de déterminer la date et l'heure actuelles utilise le constructeur par défaut de la classe Date, qui crée un objet Date avec la date et l'heure actuelles:

 Date anotherCurDate = new Date (); 

Il existe encore d'autres moyens de déterminer l'heure exacte exacte. Les ordinateurs vérifient fréquemment les serveurs de chronométrage connus pour s'assurer que tout le monde est «synchronisé». Ce processus dépasse légèrement le cadre de ce didacticiel, mais il suffit de dire que demander et recevoir l'heure exacte prend un certain temps, qui doit ensuite être pris en compte avant que la synchronisation ne puisse réellement être réalisée..

(Remarque: les appareils Android qui se connectent à des services cellulaires ont généralement des informations de date et d’heure précises, car elles peuvent être utilisées dans les communications avec les tours radio.)

Création de variables de date et d'heure à partir de zéro

Que faire maintenant si vous voulez créer une variable de date ou d’heure à partir d’une date spécifique, comme un anniversaire. Peut-être connaissez-vous, de mémoire, le nombre de millisecondes écoulées depuis le 1/1/1970 à minuit qui représente votre anniversaire. Dans mon cas, ce serait quelque chose comme 229703700 millisecondes, ou le matin du 12 avril 1977 (ajusté pour l’heure californienne). Cependant, comme vous pouvez le constater, cette tâche est très lourde. Vraiment, ce que vous voulez faire, c'est dire: ordinateur, créez-moi une variable date / heure représentant le 12 avril 1977. C'est là que la classe Calendar entre en jeu:

 GregorianCalendar bday = new GregorianCalendar (1977, Calendar.APRIL, 12); 

Vous pouvez utiliser des objets de calendrier pour manipuler des dates et extraire des informations intéressantes à leur sujet. Par exemple, vous pouvez utiliser la méthode get () pour déterminer le jour de la semaine de ma naissance:

 int dayOfWeek = bday.get (Calendar.DAY_OF_WEEK); // renvoie 3, pour mardi! 

Notez que les mois du calendrier sont basés sur 0, donc Janvier est le mois 0 et non pas le mois 1, et donc Avril est le mois 3 et non le 4. Enfin, vous pouvez extraire un objet Date d'une configuration de date du calendrier à l'aide de la méthode getTime (). méthode.

Données de date et heure de formatage

Vous pouvez utiliser la classe d'assistance nommée DateFormat (java.text.DateFormat) pour convertir les informations brutes de date et d'heure en différents formats de chaîne (pour différents paramètres régionaux, etc.) ou pour analyser les informations de chaîne dans les bits de date et d'heure appropriés, à utiliser dans le code..

Par exemple, vous pouvez utiliser la classe SimpleDateFormat (une sous-classe de la classe DateFormat) pour créer une chaîne personnalisée contenant des informations de date et d'heure. Tout d'abord, vous devez spécifier votre chaîne de format en utilisant les codes appropriés pour les différents bits d'information (voir la documentation de SimpleDateFormat pour plus de détails sur les codes individuels). Ensuite, vous appliquez ces informations à une date ou une heure spécifique. Par exemple:

 Date anotherCurDate = new Date (); SimpleDateFormat formatter = new SimpleDateFormat ("EEEE, MMMM d 'à' hh: mm a 'dans l'année' aaaa G"); String formatedDateString = formatter.format (anotherCurDate); 

Si vous deviez imprimer la chaîne appelée formatedDateString, vous pourriez voir quelque chose comme: «Le lundi 6 décembre à 08h34 en 2010».

Incidemment, vous pouvez également utiliser les classes DateFormat et SimpleDateFormat pour analyser les chaînes de date et d'heure dans la classe Date appropriée. J'espère que vous ne passerez pas beaucoup de temps à analyser les dates saisies par l'utilisateur (ce qui est généralement assez ennuyeux), mais il est utile de disposer d'un mécanisme d'analyse. Par exemple, vous pouvez analyser des horodatages à partir d'un fichier XML, dans lequel vous contrôlez ou connaissez le format de l'horodatage à l'avance, et pouvez donc générer la chaîne de format appropriée à analyser..

Affichage d'informations sur la date et l'heure à l'utilisateur

Il existe de nombreuses façons d’afficher des informations de date et d’heure à l’utilisateur. La façon dont vous choisissez dépend de vos besoins.

Le moyen le plus simple consiste peut-être simplement à afficher une date ou une heure spécifique sous forme de chaîne correctement formatée. Cette méthode est la plus logique pour des dates ou des heures fixes, telles que des anniversaires ou des événements. Utilisez simplement la classe d’utilitaire DateFormat pour créer la chaîne appropriée et l’afficher à l’écran comme tout autre texte (comme dans un contrôle TextView).

Pour afficher le temps qui passe «en temps réel», vous pouvez utiliser les commandes AnalogClock (voir figure) ou DigitalClock..

Astuce: Vous cherchez une minuterie? Découvrez le contrôle du chronomètre.

Emballer

Les dates et heures sont des types de données importants avec lesquels les développeurs Java doivent inévitablement travailler. En interne, les appareils stockent numériquement les informations de date et d’heure, mais les utilisateurs les interprètent de différentes manières et sous différents formats. Gardez le contrôle sur ces nuances en limitant le moyen par lequel les utilisateurs peuvent entrer des dates et des heures à l'aide de contrôles de sélecteur intégrés et assurez-vous que votre code utilise une représentation générique de ces informations, par exemple en utilisant l'une des nombreuses classes disponibles pour stocker des informations de date et d'heure.

à propos des auteurs

Les développeurs mobiles Lauren Darcey et Shane Conder ont co-écrit plusieurs livres sur le développement Android: un livre de programmation en profondeur intitulé Développement d'applications sans fil Android et Sams TeachYourself Développement d'applications Android en 24 heures. Lorsqu'ils n'écrivent pas, ils passent leur temps à développer des logiciels mobiles dans leur entreprise et à fournir des services de conseil. Vous pouvez les contacter par courrier électronique à l'adresse [email protected], via leur blog à l'adresse androidbook.blogspot.com et sur Twitter @androidwireless..

Besoin d'aide pour écrire des applications Android? Consultez nos derniers livres et ressources!