Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Xiaomi Pad 8 Pro adotta il potente Snapdragon 8 Elite all'interno di un corpo con spessore di soli 5,75 mm e pannello LCD a 144Hz flicker-free, per un tablet che può essere utilizzato con accessori dedicati di altissima qualità. Fra le caratteristiche esclusive, soprattutto per chi intende usarlo con la tastiera ufficiale, c'è la modalità Workstation di HyperOS 3, che trasforma Android in un sistema operativo con interfaccia a finestre
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-03-2019, 23: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 00:15. Motivo: Mancato inserimento del codice del Dao
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2019, 07:42   #2
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3299
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, 10: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, 10:52   #4
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3299
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, 14: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 14:39.
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2019, 15:51   #6
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3299
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, 16: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 17:04.
Andreawave è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2019, 17: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, 07:19   #9
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3299
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, 10: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, 10:59   #11
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3299
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, 11: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, 11:30   #13
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3299
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, 11: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, 11:28   #15
Ibanez89
Senior Member
 
Iscritto dal: Feb 2007
Città: Corato (Bari)
Messaggi: 992
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, 14: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, 16:02   #17
Ibanez89
Senior Member
 
Iscritto dal: Feb 2007
Città: Corato (Bari)
Messaggi: 992
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, 07:45   #18
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3299
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, 07:46   #19
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3299
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, 19:39   #20
Ibanez89
Senior Member
 
Iscritto dal: Feb 2007
Città: Corato (Bari)
Messaggi: 992
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


Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Unitree H1: il robot umanoide vicino al ...
GPU esterne: PCI-SIG porta le prestazion...
Per Lenovo i giocatori sono ricchi: Legi...
Polaroid lancia la nuova stampante Hi-Pr...
Da Kyndryl un gemello digitale per il di...
La Cina si prepara a una nuova missione ...
Climatizzatore Inverter A++ con Wi-Fi a ...
NZXT Flex, lo 'scandalo' del PC gaming a...
Robot lavavetri in offerta su Amazon: EC...
Attenti a questo update fake di Windows ...
NIO chiede la standardizzazione di batte...
Da 80 mesi-uomo a poche ore: l'AI cambia...
In 2 settimane senza social il cervello ...
Amazon top 7 di oggi: 2 portatili intere...
SteamGPT trapela dal client Steam: ecco ...
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: 21:56.


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