Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-03-2019, 00:13   #1
Andreawave
Junior Member
 
Iscritto dal: Mar 2019
Messaggi: 14
MySQL - Data sul DB diminuita di un giorno

Ciao a tutti.
Ho il seguente problema:
Sto facendo una java web application molto semplice in cui memorizzo nel database i dati relativi a una persona: nome, cognome e data di nascita.
L'applicazione sembra funzionare tranne per il fatto che, inserendo una data (ad esempio 07/03/2019) mi ritrovo sul db tale data diminuita di un giorno, ovvero 2019-03-06. Com'è possibile?
Potreste dirmi come fixare tale problema?
Di seguito il codice:

Il bean
Codice HTML:
package bean;

import java.io.Serializable;
import java.sql.Date;

public class Persona implements Serializable {
	
	private int idPersona;
	private String nome;
	private String cognome;
	private Date dataNascita;
	
	public Persona() {
		super();

	}

	public Persona(String nome, String cognome, Date dataNascita) {
		super();
		this.nome = nome;
		this.cognome = cognome;
		this.dataNascita = dataNascita;
	}

	public Persona(int idPersona, String nome, String cognome, Date dataNascita) {
		super();
		this.idPersona = idPersona;
		this.nome = nome;
		this.cognome = cognome;
		this.dataNascita = dataNascita;
	}

	public int getIdPersona() {
		return idPersona;
	}

	public void setIdPersona(int idPersona) {
		this.idPersona = idPersona;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCognome() {
		return cognome;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome;
	}

	public Date getDataNascita() {
		return dataNascita;
	}

	public void setDataNascita(Date dataNascita) {
		this.dataNascita = dataNascita;
	}

	
	
	
	
	

}
La servlet
Codice HTML:
package servlet;

import java.io.IOException;
import java.sql.Date;
import java.sql.SQLException;
import java.text.ParseException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.Persona;
import dao.ProvaDao;
import utility.ManipolazioneDate;

/**
 * Servlet implementation class Inserimento
 */
@WebServlet("/Inserimento")
public class Inserimento extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Default constructor. 
     */
    public Inserimento() {
      
    	
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String nome = request.getParameter("nome");
		String cognome = request.getParameter("cognome");
		String dataNascita = request.getParameter("dataNascita");
		Date dataN = null;
		try {
			dataN = (Date) ManipolazioneDate.convertiData(dataNascita);
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		Persona p = new Persona(nome, cognome, dataN);
		System.out.println(p.getNome());
		System.out.println(p.getCognome());
		System.out.println(p.getDataNascita());
		
		try{
			ProvaDao.registraPersona(p);
		}catch(SQLException e){
			e.printStackTrace();
		}
	}

}
La classe che mi permette di convertire la data dal formato stringa al formato java.sql.Date

Codice HTML:
package utility;

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

public class ManipolazioneDate {
	
	public static Date convertiData(String data) throws ParseException{
		
		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		Date parser = format.parse(data);
		java.sql.Date dataSql = new java.sql.Date(parser.getTime());
		
		return dataSql;
		
	}

}
Jsp con il form per l'inserimento dei dati

Codice HTML:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<div align="center">
		<form action="/Prova/Inserimento" method="get">
			<p>Nome</p>
			<input type="text" value="" name="nome">
			<br>
			<p>Cognome</p>
			<input type="text" value"" name="cognome">
			<br>
			<p>Data di nascita</p>
			<input type="text" value="" name="dataNascita">
			<br>
			<input type="submit" value="Invia">
			
		</form>
	</div>
</body>
</html>
Il Dao
[html]
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import bean.Persona;
import utility.Connessione;

public class ProvaDao {

public static void registraPersona(Persona persona) throws SQLException{

Connection conn = Connessione.getConnection();
PreparedStatement ps = null;


String ins = "insert into prova2.persona(nome, cognome, dataNascita) values(?,?,?)";

try{

ps = conn.prepareStatement(ins);

ps.setString(1, persona.getNome());
ps.setString(2, persona.getCognome());
ps.setDate(3, persona.getDataNascita());

ps.executeUpdate();
System.out.println("Persona inserita");

}catch(SQLException e){

System.out.println(e.getMessage());
System.out.println("Errore nell'inserimento");

}finally{

if(ps != null){
ps.close();
}

if(conn != null){
conn.close();
}
}
}

}

[html]

Ultima modifica di Andreawave : 07-03-2019 alle 01:15. Motivo: Mancato inserimento del codice del Dao
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2019, 08:42   #2
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
La butto li ma non sono sicuro.
Non è che hai definito la colonna datanascita come datetime e timestamp?
In quel caso mi verrebbe da pensare che ci sia un problema derivato dalla timezone (ad esempio se fosse un datetime e metti il 6 marzo 2019, mysql lo rappresenta in 2019-03-06 00:00:00 UTC+1 e quando vai a convertirlo risulta 2019-03-05 23:00:00 ).
E' un ipotesi, dovresti debuggare a livello di inserimento in mysql
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2019, 11:36   #3
Andreawave
Junior Member
 
Iscritto dal: Mar 2019
Messaggi: 14
Quote:
Originariamente inviato da Kaya Guarda i messaggi
La butto li ma non sono sicuro.
Non è che hai definito la colonna datanascita come datetime e timestamp?
In quel caso mi verrebbe da pensare che ci sia un problema derivato dalla timezone (ad esempio se fosse un datetime e metti il 6 marzo 2019, mysql lo rappresenta in 2019-03-06 00:00:00 UTC+1 e quando vai a convertirlo risulta 2019-03-05 23:00:00 ).
E' un ipotesi, dovresti debuggare a livello di inserimento in mysql
No, veramente la colonna datanascita sul db l'ho definita come date semplice e non come datetime
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2019, 11:52   #4
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
Quote:
Originariamente inviato da Andreawave Guarda i messaggi
No, veramente la colonna datanascita sul db l'ho definita come date semplice e non come datetime
Dai comunque un occhio ai timezone.
Inoltre vai di debug e vedi i vari valori se variano da qualche parte.
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2019, 15:37   #5
Andreawave
Junior Member
 
Iscritto dal: Mar 2019
Messaggi: 14
Quote:
Originariamente inviato da Kaya Guarda i messaggi
Dai comunque un occhio ai timezone.
Inoltre vai di debug e vedi i vari valori se variano da qualche parte.
Ok, ho fatto un debug sia utilizzando la modalità di debug di eclipse che mettendo dei system.out per verificare la data in ingresso e in uscita dal metodo di conversione delle date.
In pratica la data che ho inserito rimane invariata. Cambia(diminuisce) solo verificando nel db.
Tu pensi quindi di utilizzare datetime e non date sul db?

Ultima modifica di Andreawave : 07-03-2019 alle 15:39.
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2019, 16:51   #6
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
Quote:
Originariamente inviato da Andreawave Guarda i messaggi
Ok, ho fatto un debug sia utilizzando la modalità di debug di eclipse che mettendo dei system.out per verificare la data in ingresso e in uscita dal metodo di conversione delle date.
In pratica la data che ho inserito rimane invariata. Cambia(diminuisce) solo verificando nel db.
Tu pensi quindi di utilizzare datetime e non date sul db?
Visto che se in ballo farei un test..
Ma hai verificato la configurazione cosa dice sul timezone?
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2019, 17:55   #7
Andreawave
Junior Member
 
Iscritto dal: Mar 2019
Messaggi: 14
Quote:
Originariamente inviato da Kaya Guarda i messaggi
Visto che se in ballo farei un test..
Ma hai verificato la configurazione cosa dice sul timezone?
Ok ora provo..

Ultima modifica di Andreawave : 07-03-2019 alle 18:04.
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2019, 18:22   #8
Andreawave
Junior Member
 
Iscritto dal: Mar 2019
Messaggi: 14
Ok, ho provato ma ottengo lo stesso identico risultato, con la differenza che, usando datetime ottengo pure l'orario in formato HH:MM:SS
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2019, 08:19   #9
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
Quote:
Originariamente inviato da Andreawave Guarda i messaggi
Ok, ho provato ma ottengo lo stesso identico risultato, con la differenza che, usando datetime ottengo pure l'orario in formato HH:MM:SS
Accedi al database mysql e fai:
select now();
e verifica se data e ora coincidono con la data e l'ora corrente.
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2019, 11:46   #10
Andreawave
Junior Member
 
Iscritto dal: Mar 2019
Messaggi: 14
Quote:
Originariamente inviato da Kaya Guarda i messaggi
Accedi al database mysql e fai:
select now();
e verifica se data e ora coincidono con la data e l'ora corrente.
Fatto. La data coincide(2019-03-08) ma l'ora non coincide proprio. Risultano essere le 04:44:48
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2019, 11:59   #11
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
Quote:
Originariamente inviato da Andreawave Guarda i messaggi
Fatto. La data coincide(2019-03-08) ma l'ora non coincide proprio. Risultano essere le 04:44:48
E' da ieri che ti dico di impostare la timezone corretta sul mysql.
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2019, 12:04   #12
Andreawave
Junior Member
 
Iscritto dal: Mar 2019
Messaggi: 14
Quote:
Originariamente inviato da Kaya Guarda i messaggi
E' da ieri che ti dico di impostare la timezone corretta sul mysql.
Come si fa per settarla?
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2019, 12:30   #13
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
Quote:
Originariamente inviato da Andreawave Guarda i messaggi
Come si fa per settarla?
nel my.cnf di mysql
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 08-03-2019, 12:54   #14
Andreawave
Junior Member
 
Iscritto dal: Mar 2019
Messaggi: 14
Quote:
Originariamente inviato da Kaya Guarda i messaggi
nel my.cnf di mysql
Ok, però io il problema lo ho principalmente se inserisco date diverse dalla data corrente. Nello specifico inserisco date di nascita es 14/02/1988 su db la data viene visualizzata come 1988-02-13. Pensi che anche in questo caso il problema sia dovuto al timezone?
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2019, 12:28   #15
Ibanez89
Senior Member
 
Iscritto dal: Feb 2007
Città: Bari
Messaggi: 1015
E' un problema del timezione. La data del tuo sistema è quella italiana "UTC+1", mentre di default quella di mysql è UTC. Dovresti lavorare sulla conversione delle date nel timezione corretto.

Il problema è che hai è il seguente, da input tu leggi una data senza timezione e a mezzanotte, ad esempio 10/03/2019. Questa ti viene convertita in java.util.date oppure java.sql.date "hanno la stessa interfaccia, quindi sono equiparabili. Tecnicamente dovresti usare la più moderna java.time" nel seguente modo->

data input: 10/03/2019 00:00

dopo di che tu la passi al jdbc che la trasforma nel timezione di mysql in:

offsetcorrected data by jdbc: 09/03/2019 23:00

Quest'ultima viene salvata nel tuo campo data troncando le ore, e quindi in:

DATE di mysql: 09/03/2019

Dopo di che quando l'andrai a reperire non avendo alcuna info sull'ora verrà trasformata in:

offsetcorrected data by jdbc: 09/03/2019 01:00

E incapsulata nel tuo oggetto e montrata a video con l'ennesimo troncamento delle ore in:

output data: 09/03/2019

Forse la soluzione più barbara è cambiare l'offset del db, oppure un'altra roba non ideale può essere la seguente:

Imposta il data formatter del parser in questo modo:
Codice:
static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd", Locale.getDefault())
Crea un oggetto data per il tuo model in questo modo:

Codice:
java.util.Date.from(
                        LocalDate.parse(request.getParameter("data"), DispatcherServlet.formatter)
                                .atStartOfDay()
                                .atZone(ZoneId.of("UTC"))
                                .toInstant()
                )
Così fatto dovresti aver parsato la data in un oggetto "Zonizzato", gli normalizzi l'orario e lo converti in UTC, dopo di che lo trasformi in tipo java.util.date "che come già accennato, per il Principio di sostituzione di Liskov è intercambiabile con java.sql.date, il quale però per ovvie ragioni di information hiding e limitazioni di dipendente infra-tier dovrebbe però essere relegato solo nel data access layer" e lo salvi nel tuo model.

Occhio però, come già accennato è una soluzione di ripiego e non garantisce una corretta consistenza dei dati se l'applicativo viene spostato in un'altra timezone.
__________________
Trattative concluse con: Reiser Darkside, Rhapsodyan [ITA], ugofoscolo, teosc, Globex, Estero, lelesporting, gratta, m.linus, fuku, Danyit84 korra88 tuvok960, walter.caorle, Tecnomania01, BloodFlowers e molti altri
Ibanez89 è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2019, 15:03   #16
Andreawave
Junior Member
 
Iscritto dal: Mar 2019
Messaggi: 14
Infatti per l'applicativo verrà sicuramente utilizzato un altro db(mariadb credo) e quindi la soluzione di ripiego potrebbe non funzionare. Ad ogni modo grazie mille! Gentilissimo!
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 10-03-2019, 17:02   #17
Ibanez89
Senior Member
 
Iscritto dal: Feb 2007
Città: Bari
Messaggi: 1015
Quote:
Originariamente inviato da Andreawave Guarda i messaggi
Infatti per l'applicativo verrà sicuramente utilizzato un altro db(mariadb credo) e quindi la soluzione di ripiego potrebbe non funzionare. Ad ogni modo grazie mille! Gentilissimo!
Quella che ho proposto io è testata con mariadb, le API sono identiche a mysql
__________________
Trattative concluse con: Reiser Darkside, Rhapsodyan [ITA], ugofoscolo, teosc, Globex, Estero, lelesporting, gratta, m.linus, fuku, Danyit84 korra88 tuvok960, walter.caorle, Tecnomania01, BloodFlowers e molti altri
Ibanez89 è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2019, 08:45   #18
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
Ma scusa. è una settimana che ti martello con "è il timezone", davvero costa così fatica modificare una riga del my.cnf ?
Ibanez ha fatto tutta la spiegazione corretta, ma sinceramente non capisco per quale motivo qualcuno posta una domanda, gli si dice dove verificare e risolvere, e no che ostinato come un mulo continua.
Hai sistemato questo benedetto timezone nel file di configurazione?
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 12-03-2019, 08:46   #19
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
Quote:
Originariamente inviato da Ibanez89 Guarda i messaggi
Quella che ho proposto io è testata con mariadb, le API sono identiche a mysql
Beh fondamentalmente MariaDB è il fork di MySql...
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 13-03-2019, 20:39   #20
Ibanez89
Senior Member
 
Iscritto dal: Feb 2007
Città: Bari
Messaggi: 1015
Quote:
Originariamente inviato da Kaya Guarda i messaggi
Ma scusa. è una settimana che ti martello con "è il timezone", davvero costa così fatica modificare una riga del my.cnf ?
Ibanez ha fatto tutta la spiegazione corretta, ma sinceramente non capisco per quale motivo qualcuno posta una domanda, gli si dice dove verificare e risolvere, e no che ostinato come un mulo continua.
Hai sistemato questo benedetto timezone nel file di configurazione?
Magari lavora su un db remoto e/o non può farlo per problemi di autorizzazioni

Quote:
Beh fondamentalmente MariaDB è il fork di MySql...
Sono pressappoco identici https://mariadb.com/kb/en/library/ma...compatibility/
__________________
Trattative concluse con: Reiser Darkside, Rhapsodyan [ITA], ugofoscolo, teosc, Globex, Estero, lelesporting, gratta, m.linus, fuku, Danyit84 korra88 tuvok960, walter.caorle, Tecnomania01, BloodFlowers e molti altri
Ibanez89 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
Crepe, rotture e liste d'attesa, ma Appl...
World of Warcraft sbarca su browser, gra...
3+1 AI Data Platform, l'ecosistema apert...
Mistral Large 4 apre i pesi e sfida GLM-...
E-bike Engwe con doppio sconto: scegli t...
Windows 11 e consumo eccessivo di batter...
The Elder Scrolls 6 potrebbe chiamarsi S...
Bungie anticipa Destiny Legacy e aliment...
Ubisoft frena sui remake di Assassin's C...
14 offerte Amazon imperdibili, 5 sono tu...
The Duskbloods: l'uscita è stata ...
iPhone 18 Pro e iPhone 18 Pro Max per la...
MacBook Pro 14 con chip M5, 16GB e SSD d...
Sexting con l'IA: lo studio della Sapien...
Il TV più venduto su Amazon scende ancor...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:34.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v