IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Récupération d'un temps en minutes à partir d'une date de fin et de début


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 113
    Points : 44
    Points
    44
    Par défaut Récupération d'un temps en minutes à partir d'une date de fin et de début
    Bonjour,

    je suis actuellement en présence de ce code ci dessus qui permet de demander à l'utilisateur une date de début et une date de fin (Heure, Minutes + Jour, Mois, Année). A partir de ça je dois récupérer ces valeurs et définir le temps total en minutes de cet intervalle. Auriez vous une piste ?

    Merci beaucoup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    public class TimePanel extends JPanel {
     
    	/** Layout constraints of the panel */
    	private final GridBagConstraints gbc;
     
    	public TimePanel()
    	{
    		// Initialization of the GBC
    		this.gbc = new GridBagConstraints();
    		this.gbc.gridwidth = 1;
    		this.gbc.gridheight = 1;
    		this.gbc.weightx = 0;
    		this.gbc.weighty = 0;
    		this.gbc.anchor = GridBagConstraints.CENTER;
    		this.gbc.insets = new Insets(5, 5, 5, 5);
    		this.gbc.fill = GridBagConstraints.NONE;
    		//this.gbc.anchor = GridBagConstraints.NORTHWEST;
     
    		this.setLayout(new GridBagLayout());
    		this.setBorder(BorderFactory.createLineBorder(Color.black));
    		this.setBackground(CharteGraphique.PANEL_BACKGROUND);
     
     
     
    		txtFieldHeureDebut = new JFormattedTextField(DateFormat.getTimeInstance());
    		Calendar hour = Calendar.getInstance(Locale.FRANCE);
    		hour.set(Calendar.HOUR, 0);
    		hour.set(Calendar.MINUTE, 0);
    		hour.set(Calendar.SECOND, 0);
    		txtFieldHeureDebut.setValue(hour.getTime());
    		txtFieldHeureFin = new JFormattedTextField(DateFormat.getTimeInstance());
    		txtFieldHeureFin.setValue(hour.getTime());
    		txtFieldDateDebut = new JFormattedTextField(DateFormat.getDateInstance());
    		Calendar startDate = Calendar.getInstance(Locale.FRANCE);
    		startDate.add(Calendar.DAY_OF_MONTH, -1);
    		txtFieldDateDebut.setValue(startDate.getTime());
    		txtFieldDateFin = new JFormattedTextField(DateFormat.getDateInstance());
    		Calendar endDate = Calendar.getInstance(Locale.FRANCE);
    		endDate.add(Calendar.DAY_OF_MONTH, +1);
    		txtFieldDateFin.setValue(endDate.getTime());
    		initComponents();
    	}
     
    	public Date getStartDate()
    	{
    		Calendar startDate = Calendar.getInstance();
    		startDate.setTime((Date)txtFieldDateDebut.getValue());
    		Calendar startTime = Calendar.getInstance();
    		startTime.setTime((Date)txtFieldHeureDebut.getValue());
     
    		startDate.set(Calendar.HOUR_OF_DAY, startTime.get(Calendar.HOUR_OF_DAY));
    		startDate.set(Calendar.MINUTE, startTime.get(Calendar.MINUTE));
    		return startDate.getTime();
    	}
     
    	public Date getEndDate()
    	{
    		Calendar startDate = Calendar.getInstance();
    		startDate.setTime((Date)txtFieldDateFin.getValue());
    		Calendar startTime = Calendar.getInstance();
    		startTime.setTime((Date)txtFieldHeureFin.getValue());
     
    		startDate.set(Calendar.HOUR_OF_DAY, startTime.get(Calendar.HOUR_OF_DAY));
    		startDate.set(Calendar.MINUTE, startTime.get(Calendar.MINUTE));
    		return startDate.getTime();
    	}

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    la méthode Date.getTime() renvoie le nombre de millisecondes entre Epoch et la date concernée. Il suffit donc de faire la différence entre les deux dates, et de diviser par le nombre de millisecondes dans une minute.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Date start = startDate:
    Date end = endDate;
     
    return (end.getTime() - start.getTime()) / (60*1000);
    (Je considère bien sûr qu'une minute fait toujours 60 secondes, et je ne compte pas les secondes intercalaires. À ma connaissance aucune JVM ne gère les secondes intercalaires de toute façon.)

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Avec joda API tu peux avoir ce que tu cherches par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            DateTime endDate = new DateTime();
            DateTime startDate = new DateTime(2010, 1, 1, 0, 0, 0, 0);
            System.out.println("  Difference between " + endDate);
            System.out.println("  and " + startDate + " is " + Minutes.minutesBetween(startDate, endDate).getMinutes() + " minutes.");

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 113
    Points : 44
    Points
    44
    Par défaut
    Ok, merci.

    Je voyais ça plus compliqué que ça...
    Par contre question de gros débutant ^^ :

    Dans quoi dois je mettre cette formule ? Dans quelque chose qui va ressembler à ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public double tpsTotal()
    	{
    		Date start = startDate;
    		Date end = endDate;
     
    		return (end.getTime() - start.getTime()) / (60*1000);
    	}
    Par contre j'ai startDate et endDate soulignés en rouge

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Hum, vu que l'algorithme est simple, il faudrait essayer de le comprendre et de l'insérer toi-même là où tu en as besoin.

    Je verrais plutôt quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public double tpsTotal(Date start, Date end) {
      return (end.getTime() - start.getTime()) / (double)(60*1000);
    }

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 113
    Points : 44
    Points
    44
    Par défaut
    En fait les valeurs startDate et endDate doivent être récupérés dans la même classe donc il faut plutot que je code de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    	public Date getStartDate()
    	{
    		Calendar startDate = Calendar.getInstance();
    		startDate.setTime((Date)txtFieldDateDebut.getValue());
    		Calendar startTime = Calendar.getInstance();
    		startTime.setTime((Date)txtFieldHeureDebut.getValue());
     
    		startDate.set(Calendar.HOUR_OF_DAY, startTime.get(Calendar.HOUR_OF_DAY));
    		startDate.set(Calendar.MINUTE, startTime.get(Calendar.MINUTE));
    		return startDate.getTime();
    	}
     
    	public Date getEndDate()
    	{
    		Calendar startDate = Calendar.getInstance();
    		startDate.setTime((Date)txtFieldDateFin.getValue());
    		Calendar startTime = Calendar.getInstance();
    		startTime.setTime((Date)txtFieldHeureFin.getValue());
     
    		startDate.set(Calendar.HOUR_OF_DAY, startTime.get(Calendar.HOUR_OF_DAY));
    		startDate.set(Calendar.MINUTE, startTime.get(Calendar.MINUTE));
    		return startDate.getTime();
    	}
     
    	public double tpsTotal()
    	{	 
    		Date start = TimePanel.getStartDate();
    		Date end = TimePanel.getEndDate();
     
    		return (end.getTime() - start.getTime()) / (60*1000);
    	}
    Par contre j'ai des erreurs, il me demande de passer en static... mais mes connaissances étant minimes je ne vois pas trop quoi faire.
    En fait je voudrais récupérer les valeurs de getendDate et getstartDate pour ainsi faire le calcul directement dans tpstotal. Après quoi je ferais appel au résultat de tpsTotal dans une autre classe.

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Montre-nous ton code ou se trouve cette erreur. Il semblerait que tu appelles ces fonctions a partir du programme principal (il est static) et ta classe ne l'est pas

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut Diff. entre 2 dates
    Salut,

    Un exemple détaillé volontairement et qui correspond à la réponse de thelvin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // date début
             int aaDebut = 2008;
             int mmDebut = 1;
             int jjDebut = 1;
     
          // date fin
             int aaFin = 2008;
             int mmFin = 1;
             int jjFin = 2;
     
    // parametrage de GregorianCalendar pour la date début
             Calendar deb = new GregorianCalendar(aaDebut, mmDebut -1, jjDebut);
     
    // parametrage de GregorianCalendar pour la date fin
             Calendar fin = new GregorianCalendar(aaFin, mmFin -1, jjFin);
     
     // calcul de la différence entre les 2 dates (en millisecondes)
             long milliDeb = deb.getTimeInMillis();
             long minDeb = milliDeb / (60*1000);
             long milliFin = fin.getTimeInMillis();
             long minFin = milliFin / (60*1000);
     
          // la différence en minutes
             long diffMinutes = minFin - minDeb;
    remarque:
    Si le résultat est <0, c'est que les dates sont inversées, multiplier le résultat par -1

    Cordialement,

    Dan

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 113
    Points : 44
    Points
    44
    Par défaut
    Ok, voici la copie complète du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    import java.awt.Color;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.text.DateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Locale;
     
    import javax.swing.BorderFactory;
    import javax.swing.JFormattedTextField;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class TimePanel extends JPanel {
     
    	/** Layout constraints of the panel */
    	private final GridBagConstraints gbc;
     
    	public TimePanel()
    	{
    		// Initialization of the GBC
    		this.gbc = new GridBagConstraints();
    		this.gbc.gridwidth = 1;
    		this.gbc.gridheight = 1;
    		this.gbc.weightx = 0;
    		this.gbc.weighty = 0;
    		this.gbc.anchor = GridBagConstraints.CENTER;
    		this.gbc.insets = new Insets(5, 5, 5, 5);
    		this.gbc.fill = GridBagConstraints.NONE;
    		//this.gbc.anchor = GridBagConstraints.NORTHWEST;
     
    		this.setLayout(new GridBagLayout());
    		this.setBorder(BorderFactory.createLineBorder(Color.black));
    		this.setBackground(CharteGraphique.PANEL_BACKGROUND);
     
     
     
    		txtFieldHeureDebut = new JFormattedTextField(DateFormat.getTimeInstance());
    		Calendar hour = Calendar.getInstance(Locale.FRANCE);
    		hour.set(Calendar.HOUR, 0);
    		hour.set(Calendar.MINUTE, 0);
    		hour.set(Calendar.SECOND, 0);
    		txtFieldHeureDebut.setValue(hour.getTime());
    		txtFieldHeureFin = new JFormattedTextField(DateFormat.getTimeInstance());
    		txtFieldHeureFin.setValue(hour.getTime());
    		txtFieldDateDebut = new JFormattedTextField(DateFormat.getDateInstance());
    		Calendar startDate = Calendar.getInstance(Locale.FRANCE);
    		startDate.add(Calendar.DAY_OF_MONTH, -1);
    		txtFieldDateDebut.setValue(startDate.getTime());
    		txtFieldDateFin = new JFormattedTextField(DateFormat.getDateInstance());
    		Calendar endDate = Calendar.getInstance(Locale.FRANCE);
    		endDate.add(Calendar.DAY_OF_MONTH, +1);
    		txtFieldDateFin.setValue(endDate.getTime());
    		initComponents();
    	}
     
    	public Date getStartDate()
    	{
    		Calendar startDate = Calendar.getInstance();
    		startDate.setTime((Date)txtFieldDateDebut.getValue());
    		Calendar startTime = Calendar.getInstance();
    		startTime.setTime((Date)txtFieldHeureDebut.getValue());
     
    		startDate.set(Calendar.HOUR_OF_DAY, startTime.get(Calendar.HOUR_OF_DAY));
    		startDate.set(Calendar.MINUTE, startTime.get(Calendar.MINUTE));
    		return startDate.getTime();
    	}
     
    	public Date getEndDate()
    	{
    		Calendar startDate = Calendar.getInstance();
    		startDate.setTime((Date)txtFieldDateFin.getValue());
    		Calendar startTime = Calendar.getInstance();
    		startTime.setTime((Date)txtFieldHeureFin.getValue());
     
    		startDate.set(Calendar.HOUR_OF_DAY, startTime.get(Calendar.HOUR_OF_DAY));
    		startDate.set(Calendar.MINUTE, startTime.get(Calendar.MINUTE));
    		return startDate.getTime();
    	}
     
    	public double tpsTotal()
    	{	 
    		Date start = TimePanel.getStartDate();
    		Date end = TimePanel.getEndDate();
     
    		return (end.getTime() - start.getTime()) / (60*1000);
    	}
     
    	protected void initComponents()
    	{
    		this.gbc.gridx = 0;
    		this.gbc.gridy = 0;
    		this.gbc.fill = GridBagConstraints.HORIZONTAL;
    		JPanel panel = new JPanel();
    		panel.setBackground(CharteGraphique.TIME_LABEL_BACKGROUND);
    		JLabel label = new JLabel("H Début :");
    		label.setForeground(Color.WHITE);
    		panel.add(label);
    		add(panel, gbc);
     
    		this.gbc.gridx = 1;
    		this.gbc.gridy = 0;
    		this.gbc.fill = GridBagConstraints.NONE;
    		add(txtFieldHeureDebut, gbc);
     
    		this.gbc.gridx = 0;
    		this.gbc.gridy = 1;
    		this.gbc.fill = GridBagConstraints.HORIZONTAL;
    		panel = new JPanel();
    		panel.setBackground(CharteGraphique.TIME_LABEL_BACKGROUND);
    		label = new JLabel("H   Fin :");
    		label.setForeground(Color.WHITE);
    		panel.add(label);
    		add(panel, gbc);
     
    		this.gbc.gridx = 1;
    		this.gbc.gridy = 1;
    		this.gbc.fill = GridBagConstraints.NONE;
    		add(txtFieldHeureFin, gbc);
     
    		this.gbc.gridx = 2;
    		this.gbc.gridy = 0;
    		panel = new JPanel();
    		panel.setBackground(CharteGraphique.TIME_LABEL_BACKGROUND);
    		label = new JLabel("Date Début :");
    		label.setForeground(Color.WHITE);
    		panel.add(label);
    		add(panel, gbc);
     
    		this.gbc.gridx = 3;
    		this.gbc.gridy = 0;
    		add(txtFieldDateDebut, gbc);
     
    		this.gbc.gridx = 2;
    		this.gbc.gridy = 1;
    		panel = new JPanel();
    		panel.setBackground(CharteGraphique.TIME_LABEL_BACKGROUND);
    		label = new JLabel("Date Fin :");
    		label.setForeground(Color.WHITE);
    		panel.add(label);
    		add(panel, gbc);
     
    		this.gbc.gridx = 3;
    		this.gbc.gridy = 1;
    		add(txtFieldDateFin, gbc);
     
     
    	}
     
    	private JFormattedTextField txtFieldHeureDebut;
    	private JFormattedTextField txtFieldHeureFin;
    	private JFormattedTextField txtFieldDateDebut;
    	private JFormattedTextField txtFieldDateFin;
     
    	/**
             * 
             */
     
     
    }
    Danimo je vais regarder ce que tu as posté pour essayer de comprendre

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/02/2014, 16h03
  2. [PHP 5.1] Récupération d'un nom de pays à partir d'une adresse IP
    Par marcandre dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2011, 12h03
  3. temps qui passe à partir d'une date connue
    Par Invité dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/09/2009, 21h40
  4. Réponses: 1
    Dernier message: 26/03/2008, 22h19
  5. extraction minute a partir d'une date
    Par habasque dans le forum Oracle
    Réponses: 2
    Dernier message: 14/11/2006, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo