Vai al contenuto


Foto

[JAVA] Richieste di aiuto Java


Questa discussione e' stata archiviata Questo significa che non e' possibile rispondere
201 risposte a questa discussione

#1 SuperMario=ITA=

SuperMario=ITA=

    Lo scemo del forum

  • Moderatori
  • 96.852 Messaggi:

Inviato 20 aprile 2011 - 10:02

Allora, sono sotto con la tesi che devo programmare in java...se mi date una mano a risolvere alcuni problemi ve ne sono grato.

Il problema di oggi: devo conteggiare i giorni tra 2 date. Ho trovato questo metodo in rete che concettualmente sembra ok:

public static long daysBetween(Calendar startDate, Calendar endDate) {  

    	  Calendar date = (Calendar) startDate.clone();  

    	  long daysBetween = 0;  

    	  while (date.before(endDate)) {  

    	    date.add(Calendar.DAY_OF_MONTH, 1);  

    	    daysBetween++;  

    	  }  

    	  return daysBetween;  

    	}

Uso il java.util.calendar

Ecco, perchè i mesi sono tutti di 31 giorni? :awesome:

Cioè, mi segna le date corrette se metto dentro due date dello stesso mese o di mesi con 31 gg, ma se metto data iniziale 30 giugno e finale 1 luglio mi da 2 giorni. :ncasd:
Infatti se metto data iniziale 31 giugno e finale 1 luglio mi da 1 giorno :lol:

che cazzo di calendario è? :(
ho provato anche a usare il GregorianCalendar ma non cambia un cazzo...

Dove sbaglio?
TghXItr.gif - Amare la Formattazione è la Soluzione al 90% dei Problemi della Vita

#2 Guest__*

Guest__*
  • Ospiti

Inviato 20 aprile 2011 - 10:10


public class DateDiffernces {

	

	public static void main(String[] args) {

		

		Date from = null;

		try {

			from = new SimpleDateFormat("dd/MM/yyyy").parse("10/11/2007");

		} catch (ParseException e) {

			e.printStackTrace();

		}

		from.getTime();

		Date to = null;

		try {

			to = new SimpleDateFormat("dd/MM/yyyy").parse("10/12/2007");

		} catch (ParseException e) {

			e.printStackTrace();

		}

		long diff = to.getTime()-from.getTime();



        System.out.println(diff / (1000L*60L*60L*24L)+1);

	}

}


...dovrebbe fungere...

#3 Guest__*

Guest__*
  • Ospiti

Inviato 20 aprile 2011 - 10:12

...in sinto trasformo le date in long...eseguo la differenza e poi converto i mills in giorni...

#4 harvester2

harvester2

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 2.621 Messaggi:

Inviato 20 aprile 2011 - 10:16

public class DateDifferenceExample{

public static void main(String[] args){

//get instance of Calendar objects
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();

//set two dates we want to know difference of
cal1.set(2006, 12, 30);
cal2.set(2007, 5, 3);

long milis1 = cal1.getTimeInMillis();
long milis2 = cal2.getTimeInMillis();

//difference in milliseconds
long diff = milis2 - milis1;

//difference in seconds
long diffSeconds = diff / 1000;

//difference in minutes
long diffMinutes = diff / (60 * 1000);

//difference in hours
long diffHours = diff / (60 * 60 * 1000);

//difference in days
long diffDays = diff / (24 * 60 * 60 * 1000);

System.out.println("Date difference in milliseconds: " + diff + " milliseconds.");
System.out.println("Date difference in seconds: " + diffSeconds + " seconds.");
System.out.println("Date difference in minutes: " + diffMinutes + " minutes.");
System.out.println("Date difference in hours: " + diffHours + " hours.");
System.out.println("Date difference in days: " + diffDays + " days.");

}
}
Immagine inserita

#5 SuperMario=ITA=

SuperMario=ITA=

    Lo scemo del forum

  • Moderatori
  • 96.852 Messaggi:

Inviato 20 aprile 2011 - 10:21

siamo da capo.

dal 30 giugno al 1 luglio mi da due giorni.

è come se il suo calendario interno ha 31 giorni per ogni mese.
TghXItr.gif - Amare la Formattazione è la Soluzione al 90% dei Problemi della Vita

#6 SuperMario=ITA=

SuperMario=ITA=

    Lo scemo del forum

  • Moderatori
  • 96.852 Messaggi:

Inviato 20 aprile 2011 - 10:23

no, quello di harv è cannato, ma usando la formula di ally è ok

((1000L*60L*60L*24L)+1)
al denominatore sembra ok

moar testing.

nel frattempo grazie :awesome:
TghXItr.gif - Amare la Formattazione è la Soluzione al 90% dei Problemi della Vita

#7 Guest__*

Guest__*
  • Ospiti

Inviato 20 aprile 2011 - 10:24

siamo da capo.

dal 30 giugno al 1 luglio mi da due giorni.

è come se il suo calendario interno ha 31 giorni per ogni mese.


...segna anche due giorni dal "10/06/2007" al "11/06/2007"...

#8 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 20 aprile 2011 - 10:25

edit: ho scritto una cazzata.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#9 SuperMario=ITA=

SuperMario=ITA=

    Lo scemo del forum

  • Moderatori
  • 96.852 Messaggi:

Inviato 20 aprile 2011 - 10:25

no. cazzato uguale.

febbraio ha 31 giorni :ncasd:

:awesome:
TghXItr.gif - Amare la Formattazione è la Soluzione al 90% dei Problemi della Vita

#10 Guest__*

Guest__*
  • Ospiti

Inviato 20 aprile 2011 - 10:26

no, quello di harv è cannato, ma usando la formula di ally è ok

((1000L*60L*60L*24L)+1)
al denominatore sembra ok

moar testing.

nel frattempo grazie :awesome:


...togli il +1 e non considera la data di fine come compresa...

#11 p.nightmare

p.nightmare

    Dittatore

  • Amministratori
  • 97.331 Messaggi:

Inviato 20 aprile 2011 - 10:26

Immagine inserita


:awesome:

No real limits of any kind apply here - not even the sky
è diventato un tutt'uno con lo spazio...
PVoutput


#12 SuperMario=ITA=

SuperMario=ITA=

    Lo scemo del forum

  • Moderatori
  • 96.852 Messaggi:

Inviato 20 aprile 2011 - 10:27

?[/url]":2597rvy8] siamo da capo.

dal 30 giugno al 1 luglio mi da due giorni.

è come se il suo calendario interno ha 31 giorni per ogni mese.


...segna anche due giorni dal "10/06/2007" al "11/06/2007"...


no, ne segna uno.

E il tuo ne segna zero, quindi è cazzato.
TghXItr.gif - Amare la Formattazione è la Soluzione al 90% dei Problemi della Vita

#13 Guest__*

Guest__*
  • Ospiti

Inviato 20 aprile 2011 - 10:31

?[/url]":20wrp1v3]

...segna anche due giorni dal "10/06/2007" al "11/06/2007"...


no, ne segna uno.

E il tuo ne segna zero, quindi è cazzato.



public class DateDiffernces {

	

	public static void main(String[] args) {

		

		Date from = null;

		try {

			from = new SimpleDateFormat("dd/MM/yyyy").parse("28/02/2007");

		} catch (ParseException e) {

			e.printStackTrace();

		}

		from.getTime();

		Date to = null;

		try {

			to = new SimpleDateFormat("dd/MM/yyyy").parse("01/03/2007");

		} catch (ParseException e) {

			e.printStackTrace();

		}

		long diff = to.getTime()-from.getTime();



        System.out.println(diff / (1000L*60L*60L*24L)+0);

	}

}


...in console ho 1 come risultato...

#14 SuperMario=ITA=

SuperMario=ITA=

    Lo scemo del forum

  • Moderatori
  • 96.852 Messaggi:

Inviato 20 aprile 2011 - 10:31

ricapitolando:

col mio: la differenza tra due giorni vicini segna 1 giorno (giusto. da oggi a domani passa 1 gg). Ma dal 30 giugno al 1 luglio ne segna 2 (come se ci fosse di mezzo il 31 giugno che non esiste).
Stessa cosa per 28 febbraio - 1 marzo: segna 4 giorni.

Stessa cosa per quello di harv.

Quello di ally segna tutti gli stessi valori meno uno.
EDIT: quello di ally ho solo preso la formula finale...

come uso il tuo partendo da due variabili calendar? uso il getMillis?
TghXItr.gif - Amare la Formattazione è la Soluzione al 90% dei Problemi della Vita

#15 Guest__*

Guest__*
  • Ospiti

Inviato 20 aprile 2011 - 10:38

ricapitolando:

col mio: la differenza tra due giorni vicini segna 1 giorno (giusto. da oggi a domani passa 1 gg). Ma dal 30 giugno al 1 luglio ne segna 2 (come se ci fosse di mezzo il 31 giugno che non esiste).
Stessa cosa per 28 febbraio - 1 marzo: segna 4 giorni.

Stessa cosa per quello di harv.

Quello di ally segna tutti gli stessi valori meno uno.
EDIT: quello di ally ho solo preso la formula finale...

come uso il tuo partendo da due variabili calendar? uso il getMillis?



SimpleDateFormat simpleDateForm = new SimpleDateFormat("HH:mm:ss");

System.out.println(simpleDateForm.format(calendar.getTime()));


...a mio avviso ti conviene lavorare a millis...

#16 SuperMario=ITA=

SuperMario=ITA=

    Lo scemo del forum

  • Moderatori
  • 96.852 Messaggi:

Inviato 20 aprile 2011 - 10:53

:awesome:

non sono capace :ncasd:


public static long daysBetween(Calendar startDate, Calendar endDate) { 



    	SimpleDateFormat from = new SimpleDateFormat("dd/MM/yyyy");

    	from.format(startDate.getTime());

    	SimpleDateFormat to = new SimpleDateFormat("dd/MM/yyyy");

    	from.format(endDate.getTime();

    	

        Date from = null;

        try {

           from = new SimpleDateFormat("dd/MM/yyyy").parse("10/11/2007");

        } catch (ParseException e) {

           e.printStackTrace();

        }

        from.getTime();

        Date to = null;

        try {

           to = new SimpleDateFormat("dd/MM/yyyy").parse("10/12/2007");

        } catch (ParseException e) {

           e.printStackTrace();

        }

        long diff = to.getTime()-from.getTime();



          long daysBetween = diff / (1000L*60L*60L*24L)+0);



return daysBetween;



}


dimmi come fare. Io le passo le due variabili calendar con dentro data iniziale e finale (giorno mese e anno e basta) e la funzione le deve usare e restituirmi il valore daysBetween.

Non ho mai usato il simpledateformat, ho sempre lavorato col calendar quindi non so come fare. Scusate ma sono alle prime armi e so poco o un cazzo. :lol:
TghXItr.gif - Amare la Formattazione è la Soluzione al 90% dei Problemi della Vita

#17 harvester2

harvester2

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 2.621 Messaggi:

Inviato 20 aprile 2011 - 11:08

è na vita che non programmo in java
Immagine inserita

#18 Guest__*

Guest__*
  • Ospiti

Inviato 20 aprile 2011 - 11:14


//mi ricavo i mills da calendar

		

		Calendar startDate = Calendar.getInstance();

		startDate.set(2010,02, 28); 

		Calendar endDate = Calendar.getInstance();

		endDate.set(2010, 03, 01); 

		

		long diff = endDate.getTimeInMillis()-startDate.getTimeInMillis();

		System.out.println("differenza calendar "+(diff / (1000L*60L*60L*24L)+0));

        

		//mi ricavo i mills da Date

        

        Date from = null;

		try {

			from = new SimpleDateFormat("dd/MM/yyyy").parse(startDate.get(Calendar.DATE)+"/"+startDate.get(Calendar.MONTH)+"/"+startDate.get(Calendar.YEAR));

		} catch (ParseException e) {

			e.printStackTrace();

		}

		Date to = null;

		try {

			to = new SimpleDateFormat("dd/MM/yyyy").parse(endDate.get(Calendar.DATE)+"/"+endDate.get(Calendar.MONTH)+"/"+endDate.get(Calendar.YEAR));

		} catch (ParseException e) {

			e.printStackTrace();

		}

		diff = to.getTime()-from.getTime();

		System.out.println("differenza mills "+(diff / (1000L*60L*60L*24L)+0));

	         


...sicuramente esitono parse migliori...comunque con calendar sballina le date...

#19 Guest__*

Guest__*
  • Ospiti

Inviato 20 aprile 2011 - 11:16

...ah la prima parte è solo per dimostrare che sballina con calendar...

#20 harvester2

harvester2

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 2.621 Messaggi:

Inviato 20 aprile 2011 - 11:18

purtoppo non ho l'ambiente configurato.....ma prova questo

DateFormat format = DateFormat.getDateTimeInstance();
Date completeDate=null;
Date postedDate=null;

try
{
completeDate = format.parse("18-May-09 11:30:57");
postedDate = format.parse("11-May-09 10:46:37");
long res = completeDate.getTime() - postedDate.getTime();

System.out.println("postedDate: " + postedDate);
System.out.println("completeDate: " + completeDate);
System.out.println("result: " + res + '\n' + "minutes: " + (double) res / (60*1000) + '\n'
+ "hours: " + (double) res / (60*60*1000) + '\n' + "days: " + (double) res / (24*60*60*1000));
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Immagine inserita