2012-11-03 3 views
0

Basé sur le poste Calculating difference in days between datesCalcul de différence de jours entre deux dates avec des vecteurs

Comment nourrir les vecteurs Vé et vS avec des dates aléatoires puis retourner la différence entre vos dates? Rappelant que vS doit être supérieur à vE? En fait, je devrais séparer en deux méthodes: une date aléatoire et l'autre calcule la différence.

/* 
* Randomizacao 
*/ 
package random04DiferencaDataVetor; 

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Random; 

public class Random04DiferencaDataVetor { 

    public static void main(String[] args) throws ParseException { 


     final long intervalo = 1000000000; 
     Random rnd = new Random(); 
     String[] vE = new String[5]; 
     String[] vS = new String[5]; 
     for (int i = 0; i < vE.length; i++) { 
      /* 
      * arrumar vetores para gerar datas aleatorias 
      * lembrando que vS deve ser maior que vE 
      */ 
      retornaData(); 
     } 
    } 

    static void retornaData() throws ParseException { 
     final long intervalo = 1000000000; 
     Random rnd = new Random(); 
     // formatando as datas 
     DateFormat formato = new SimpleDateFormat("yyyy"); 
     Date anoE = formato.parse("2012"); 
     long timeE = anoE.getTime(); 
     Date anoS = formato.parse("2013"); 
     long timeS = anoS.getTime(); 
     // define o intervalo de datas em 1 ano 
     long tempoIntervalo = timeE - timeS; 
     // randomiza a data de entrada 
     long rndTempoE = timeE + (long) (rnd.nextDouble() * tempoIntervalo); 
     // data entrada 
     String dataE = new SimpleDateFormat("hh:mm dd/MM/yyyy").format(rndTempoE); 
     // randomiza a data de saida 
     long rndTempoS = rndTempoE + (long) (rnd.nextDouble() * intervalo * 2); 
     // data de saida 
     String dataS = new SimpleDateFormat("hh:mm dd/MM/yyyy").format(rndTempoS); 
     // formato de data 
     SimpleDateFormat sdf = new SimpleDateFormat("hh:mm dd/MM/yyyy"); 
     try { 
      Date dataEnt = sdf.parse(dataE); 
      Date dataSaida = sdf.parse(dataS); 
      long differenceMilliSeconds = dataSaida.getTime() - dataEnt.getTime(); 
      long days = differenceMilliSeconds/1000/60/60/24; 
      long hours = (differenceMilliSeconds % (1000 * 60 * 60 * 24))/1000/60/60; 
      long minutes = (differenceMilliSeconds % (1000 * 60 * 60))/1000/60; 
      System.out.println(days + " days, " + hours + " hours, " + minutes + " minutes."); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

Je n'arrive pas à comprendre exactement ce que vous essayez de faire ici ... – cHao

Répondre

4
  1. Vous avez déclaré Array pas le Vector. Vous pouvez utiliser `déclaration de vecteur comme suit:

    Vector<String> vE = new Vector<String>(); 
    Vector<String> vS = new Vector<String>(); 
    

    Mais vous pouvez utiliser List/ArrayList en place de Vector comme ci-dessous:

    List<String> vE = new ArrayList<String>(); 
    List<String> vS = new ArrayList<String>(); 
    
  2. Pour ajouter les chaînes de date dans les vecteurs, vous pouvez utiliser add méthode comme ci-dessous:

    String dateString1 = "01/01/2012"; 
    vE.add(dateString1); 
    
  3. Pour ajouter 5 dates de votre vE Vector, vous pouvez le faire en b elow:

    for (int i = 0; i < 5; i++) { 
        int day = 1+ rnd.nextInt(28); //day from 1 to 28 
        int month = 1+rnd.nextInt(12); //day from 1 to 12 
        int year = 2000 +rnd.nextInt(13); //year from 2000 to 2012 
        String dateString = month+"/"+day+"/"year; 
        vE.add(dateString); 
    } 
    
  4. Vous pouvez passer Vector vE dans votre méthode retornaData(); pour calculer les différences:

     //call in `main` method outside the `for` loop as: 
        retornaData(vE); 
    
        //change method signature as 
        static void retornaData(Vector<String> vE) throws ParseException { 
    
  5. intérieur retornaData(), vous pouvez récupérer deux chaînes de date et calculer la différence:

    String date1 = vE.get(0);//use some index 
        String date2 = vE.get(1); //use some index 
    
        //compute the difference between date1 and date2 
    

Si vous pouviez utiliser l'anglais dans votre exemple de programme, je pourrais essayer de vous conseiller d'autres corrections/améliorations.

+0

Désolé mais je n'utiliserais pas 'Vector' car c'est une collection obsolète en Java. Je préférerais ses alternatives à la place. +1 bien que la réponse semble légitime. – Lion

+0

@Lion: Comme vous avez utilisé 'vector' dans le titre de la question, je pensais que vous vouliez utiliser' Vector'. Mise à jour de la réponse pour utiliser 'List/ArrayList', ce qui est plus légitime. Cependant, il n'y a pas beaucoup de différence dans le modèle d'utilisation. –