PDA

View Full Version : [SQL/JAVA] Creare data random


Alhazred
25-07-2008, 22:11
Mi serve creare una data random che rientri nei 15 giorni successivi alla data della creazione.
Ho trovato in giro questa istruzione per mysql:
now() + interval rand()*15 day
ma non funziona... SQLException: Data truncation: Incorrect date value: 'NOW() + INTERVAL RAND()*15 day' for column 'scadenza' at row 1
Forse sono io che sbaglio ad inserirla.
Ho un preparedstatement ed imposto la data così: insertIngrediente.setString(3,"NOW() + INTERVAL RAND()*15 day");

Comunque, come posso generare in un altro modo, anche con un metodo java una data casuale entro 15 giorni nel futuro nel formato aaaa-mm-gg?

Alhazred
25-07-2008, 22:58
Dovrei aver risolto.
Se a qualcuno può tornare utile:

public static String dataCasuale() {
String data = "";
GregorianCalendar gc = new GregorianCalendar();
int anno = gc.get(GregorianCalendar.YEAR);
int mese = gc.get(GregorianCalendar.MONTH)+1; //+1 perché GregorianCalendar parte da 0 a contare i mesi
int giorno = gc.get(GregorianCalendar.DATE);
int nuovoGiorno = 0;
Random aRandom = new Random();

//numero casuale da 1 a 31
long range = 31;
long fraction = (long)(range * aRandom.nextDouble());
nuovoGiorno = (int)(fraction + 1);

//se il mese è da 30 giorni e il numero generato è 31
if (mese == 4 || mese == 6 || mese == 9 || mese == 11 && nuovoGiorno > 30) {
mese = mese + 1; //passo al mese seguente
nuovoGiorno = 1; //imposto il giorno come primo del mese
}
//se il mese è febbraio e il numero casuale è > di 28
else if (mese == 2 && nuovoGiorno > 28) {
mese = mese + 1; //passo al mese seguente
nuovoGiorno = 1; //imposto il giorno come primo del mese
}
//se nuovoGiorno è precedente al giorno attuale
if (nuovoGiorno <= giorno)
mese++; //porto avanti il mese di scadenza di 1
//se il nuovo mese risulta essere 13 ovvero un numero non valido
if (mese == 13) {
mese = 1; //passo a Gennaio
anno++; //passo all'anno seguente
}

if (mese < 10 && nuovoGiorno < 10)
data = anno+"-0"+mese+"-0"+nuovoGiorno;
else if (mese < 10 && giorno >= 10)
data = anno+"-0"+mese+"-"+nuovoGiorno;
else if (mese >= 10 && nuovoGiorno < 10)
data = anno+"-"+mese+"-0"+nuovoGiorno;
else
data = anno+"-"+mese+"-"+giorno;

return data;
}