Sto scrivendo una webapp abbastanza grande in asp.net/c#
con MSSQL 2008 r2
che serve il database. Il programma deve convertire stringhe date/time
(in formato data ISO) a DateTime
dove vengono utilizzate e successivamente memorizzate come smalldatetime
in sql
.La conversione da e in data/ora aggiunge un'ora?
Quando le stringhe vengono convertite in datetimes
, viene aggiunto misteriosamente al risultato un hour
. Comprendo che, essendo nel Regno Unito, siamo soggetti all'ora legale (attualmente attiva) ma sicuramente il metodo datetime
.convert lo capisce? Quando si converte di nuovo in una stringa, il risultato è come previsto.
Ho scritto un piccolo programma per illustrare il problema (anche comprese le date ISO non per la mia sanità mentale):
class Program
{
static void Main(string[] args)
{
//BB();
//Dist();
DateTime d1 = new DateTime();
DateTime d2 = new DateTime();
string d1s = "2010-09-13T09:30:01Z";
string d2s = "2010-09-13 09:30:01";
d1 = Convert.ToDateTime(d1s);
d2 = Convert.ToDateTime(d2s);
Console.WriteLine("d1s:{0} d1:{1} ", d1s, d1);
Console.WriteLine("d2s:{0} d2:{1} ", d2s, d2);
d1s = d1.ToString("u"); d2s = d2.ToString("u");
Console.WriteLine("\nd1: {0}", d1s);
Console.WriteLine("d2: {0}", d2s);
d1 = Convert.ToDateTime(d1s);
d2 = Convert.ToDateTime(d2s);
Console.WriteLine("\nd1s:{0} d1:{1} ", d1s, d1);
Console.WriteLine("d2s:{0} d2:{1} ", d2s, d2);
Console.Read();
}
}
Ecco i risultati che ottengo quando ho eseguito il programma:
d1s:2010-09-13T09:30:01Z d1:13/09/2010 10:30:01
d2s:2010-09-13 09:30:01 d2:13/09/2010 09:30:01
d1: 2010-09-13 10:30:01Z
d2: 2010-09-13 09:30:01Z
d1s:2010-09-13 10:30:01Z d1:13/09/2010 11:30:01
d2s:2010-09-13 09:30:01Z d2:13/09/2010 10:30:01
Done
È questo il comportamento corretto? Sono un idiota? Mi sarei aspettato la conversione di datetime in stringa e quindi la stringa esatta di ritorno a datetime avrebbe restituito l'input originale. Se questo è il comportamento corretto, qualche idea su come ottenere un risultato coerente, ma usando ancora Convert.ToDateTime()
?
Molte grazie.
Ah, quindi l'eliminazione della "Z" risolverà le cose. Devo eseguire alcune operazioni di sostituzione delle stringhe in quanto questo è il formato in cui viene inserito. (Modifica - sì, sembra che sia stato corretto.) –