Travailler avec des jours/heures/minutes/secondes

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 412 fois - Téléchargée 16 fois

Contenu du snippet

Bonjour,

Ayant fait quelques recherches sur les calculs de date et d'heure, je n'ai rien trouvé d'assez bien pour réaliser des calculs de temps.
Je désirais récupérer d'un fichier plat généré par mon GPS les relevées horaires d'un parcours.
Je voulais alors faire des calculs comme par exemple partir de 00:00:00 et avoir le nombre de jours si les 24h étaient dépassés. Ou encore retirer les temps où le déplacement est nul...
Voici donc mon résultat sous forme d'une classe (JourHeure).
Cela peut être amélioré pour son propre usage. Je suis ouvert et même demandeur de remarques (constructives).

Source / Exemple :

package technique;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
/**


* Classe permettant de travailler avec une chronologie basee sur le format jour/heure/minute/seconde

* @author franck
 *


*/
public class JourHeure extends Date {
 private static final long serialVersionUID = 4562804277680890199L;
 SimpleDateFormat formatHeure = new SimpleDateFormat("HH:mm:ss");
 SimpleDateFormat formatJour = new SimpleDateFormat("D");
 /**


* constructeur de base initialise a 00:00:00

*/
 private JourHeure(){
  this(0,"00:00:00");
 }
 /**


* constructeur par saisi du nombre de jour et de l'heure

* @param p_NbrJour au format int

* @param p_heure au format HH:MM:SS

*/
 public JourHeure(int p_NbrJour, String p_heure){
  super();
  Date d = new Date(0);
  formatHeure.setTimeZone(TimeZone.getTimeZone("GMT+0"));
  formatJour.setTimeZone(TimeZone.getTimeZone("GMT+0"));
  try {
   d = formatHeure.parse(p_heure);
   this.setTime(d.getTime());
  } catch (ParseException e) {
   e.printStackTrace();
  }
  this.setTime(86400000L*p_NbrJour+this.getTime());
 }
 /**


* constructeur avec uniquement l'heure

* @param p_heure au format HH:MM:SS

*/
 public JourHeure(String p_heure){
  this(0,p_heure);
 }
 //METHODES
 /**


* methode retournant la difference avec un autre JourHeure

*/
 public JourHeure differenceAvecJourHeure(JourHeure p_jh){
  JourHeure ret_jh=new JourHeure();
  ret_jh.setTime(Math.abs(getTime()-p_jh.getTime()));
  return ret_jh;
 }
 /**


* methode permettant d'ajouter un temps

* @param p_jh

*/
 public void calcul_Ajouter(JourHeure p_jh){
  this.setTime(this.getTime()+p_jh.getTime());
 }
 /**


* methode permettant de soustraire un temps

* @param p_jh

*/
 public void calcul_Retirer(JourHeure p_jh){
  this.setTime(this.getTime()-p_jh.getTime());
 }
 /**


* methode toString au format suivant : "3j 15:50:23"

*/
 public String toString(){
  int jour = Integer.parseInt(formatJour.format(this))-1;
  return jour+"j "+formatHeure.format(this);
 }
}

Conclusion :

Etant novice, j'aimerai des remarques constructives. Merci

J'espère que cela aidera certain d'entre vous.

A voir également

Ajouter un commentaire

Commentaires

cs_loloof64
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012
-
Bonjour FreddyOne73, je voulais déjà essayer de comprendre le fonctionnement de ta classe avant eventuellement de m'en servir, mais il y a juste un truc que je n'ai pas compris : au niveau du constructeur, NbrJour vaut-il 1 pour lundi ou 0 pour lundi? Car si je regarde ta documentation Javadoc, elle ne semble pas se suffire à elle-même, je suis obligé
-> d'examiner ton code pour en savoir plus
-> d'examiner la Javadoc standard, car ton code ne laisse rien transparaître non plus (en effet, tu utilise directement la fonction standard SimpleDateFormat#parse(String)

Tu me diras certainement, que ceux qui veulent en savoir plus n'ont qu'à aller consulter la Javadoc : mais plus tu en feras pour le lecteur de ta classe, plus il sera à l'aise avec. C'est mon avis, après avoir commencé à lire de la documentation sur du codage "propre".
cs_FreddyONE73
Messages postés
7
Date d'inscription
dimanche 26 juin 2005
Statut
Membre
Dernière intervention
17 janvier 2015
2 -
Tout d'abord, merci pour ton commentaire.
Effectivement, je n'ai pas vraiment développé.
En fait, c'est ce que je ne voulais pas. Avoir une date de référence !
Donc ni lundi ni autre jour.
Mon utilité est d'avoir un chronomètre.
Le GPS me fourni les heures de passage à des endroit et moi je veux partir de 0j 00:00:00 en début de parcours et lire directement le temps que je mets pour aller aux points suivants.
Comme 24h ne suffisent pas forcément, je compte aussi les jours.

Voilà, j'espère être plus claire cette fois.
cs_loloof64
Messages postés
350
Date d'inscription
vendredi 1 septembre 2006
Statut
Membre
Dernière intervention
6 novembre 2012
-
D'accord, je comprends mieux. Milles excuses alors .
shaiulud
Messages postés
405
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
15 juillet 2014
17 -
Voici les commentaires qui j'espère te permettrons d'évoluer.

Gestion des Exceptions : ici si un mauvais paramètre est donné à ton constructeur , que fera ta classe ?
# catch (ParseException e) {
# e.printStackTrace();
# }

ta classe est utilitaires technique (nom de package ok. la norme sun voudrais [ton domaine].[ton projet].technique )
Ta classe devrait plutot devenir un Helper (ie classe abstraite avec toutes les méthodes static)
cs_FreddyONE73
Messages postés
7
Date d'inscription
dimanche 26 juin 2005
Statut
Membre
Dernière intervention
17 janvier 2015
2 -
Merci shaiulud pour tes commentaires enrichissants.
J'avoue sans problème que la gestion des erreurs n'est pas mon fort.
Il est vrai aussi que programmant dans mon coin, j'outrepasse le packaging à la sun.

Par contre, pourquoi mettre cette classe abstraite puisque je stocke une donnée "date" ?
J'ai bien besoin d'implémenter mon objet pour lui donner des valeurs, non ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.