Piszę dość duży webapp w asp.net/c#
z MSSQL 2008 r2
obsługujących bazę danych. Program musi konwertować ciągi znaków date/time
(w formacie daty ISO) na DateTime
, gdzie są używane, a następnie przechowywane jako smalldatetime
w sql
.Konwersja do iz datetime dodaje godzinę?
Po zamianie ciągów znaków na datetimes
, tajemniczo dodano do wyniku znak hour
. Rozumiem, że będąc w Wielkiej Brytanii, jesteśmy poddawani czasom letnim (obecnie aktywne), ale z pewnością rozumie to metoda datetime
.convert? Podczas konwersji z powrotem na ciąg, wynik jest zgodny z oczekiwaniami.
Napisałem mały program do zilustrowania problemu (w tym także spoza terminach ISO dla mojego zdrowia psychicznego):
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();
}
}
Oto wyniki dostaję gdy uruchamiam program:
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
Czy to jest prawidłowe zachowanie? Czy jestem idiotą? Oczekiwałabym konwersji datetime na string, a następnie dokładny łańcuch z powrotem do datetime zwróciłby oryginalne dane wejściowe. Jeśli to jest prawidłowe zachowanie, wszelkie pomysły, jak uzyskać spójny wynik, ale nadal przy użyciu Convert.ToDateTime()
?
Wielkie dzięki.
Ahh, więc zrzucenie "Z" naprawi wszystko. Będę musiał wprowadzić kilka ciągów znaków, ponieważ jest to format, w który go wprowadzam. (Edycja - tak, to chyba naprawiło.) –