Friday, March 08, 2013

SQL datetime & UTC

A datetime nem tárol DateTimeKind-ot ezert jobb megoldás lehet a datetimeoffset, de ha ez nem megoldható viszont tudjuk a Kind-ot (itt UTC) akkor miután kiolvastuk a DateTime-ot az SQLDataReader-rel annak kétféleképpen is megadhatjuk a típusát:
  • DateTime unspecified = reader.GetDateTime(index);
    DateTime d = new DateTime(unspecified.Ticks, DateTimeKind.UTC);
  • DateTime unspecified = reader.GetDateTime(index);
    DateTime d2= DateTime.SpecifyKind(unspecified, DateTimeKind.UTC);
Persze jobb ezt egy extensionbe tenni:
public static class SqlDataReaderExtensions {
    public static DateTime GetDateTimeUtc(this SqlDataReader reader, int columnOrdinal) {
        DateTime dt = new DateTime(reader.GetDateTime(0).Ticks, DateTimeKind.Utc);
        return dt;
    }
}
és utána ezt használni:
DateTime d = reader.GetDateTimeUTC(index);