Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
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: 3290
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: 3290
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: 3290
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: 3290
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: 3290
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: 3290
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à: Corato (Bari)
Messaggi: 986
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
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à: Corato (Bari)
Messaggi: 986
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
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: 3290
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: 3290
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à: Corato (Bari)
Messaggi: 986
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
Ibanez89 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Mercy, Mission Impossible, Aronofsky: il...
Project Windless: il nuovo action in esc...
Saros: mostrato il gameplay del gioco de...
God of War: Sons of Sparta annunciato e ...
John Wick torna in un nuovo videogioco a...
MADE chiude il 2025 con 59 partner e 250...
007 First Light: allo State of Play un n...
Gli iPhone su Amazon costano meno che su...
Credevi fosse un assistente IA, invece e...
God of War Trilogy Remake annunciato all...
Star Wars Galactic Racer mostra il gamep...
Legacy of Kain: Defiance Remastered annu...
Control Resonant si mostra allo State of...
Battlefield 6 Stagione 2: l'avanzata del...
Stop a umidità e muffa: deumidificatore ...
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: 14:38.


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