public void NpgsqlTimeTzConvert() { NpgsqlTimeTZ timetz = new NpgsqlTimeTZ(13, 3, 45.001, new NpgsqlTimeZone(-5, 0)); Assert.AreEqual(13, timetz.Hours); Assert.AreEqual(3, timetz.Minutes); Assert.AreEqual(45, timetz.Seconds); Assert.AreEqual(1, timetz.Milliseconds); Assert.AreEqual(-5, timetz.TimeZone.Hours); Assert.AreEqual(0, timetz.TimeZone.Minutes); Assert.AreEqual(0, timetz.TimeZone.Seconds); Assert.AreEqual(18, timetz.UTCTime.Hours); Assert.AreEqual(3, timetz.UTCTime.Minutes); Assert.AreEqual(45, timetz.UTCTime.Seconds); Assert.AreEqual(1, timetz.UTCTime.Milliseconds); TimeSpan utcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now); // add utc time as timespan to get local time as a timespan TimeSpan localTime = utcOffset + new TimeSpan(0, 18, 3, 45, 1); DateTime localDateTime = (DateTime)timetz; Assert.AreEqual(localTime.Hours, localDateTime.Hour); Assert.AreEqual(localTime.Minutes, localDateTime.Minute); Assert.AreEqual(localTime.Seconds, timetz.LocalTime.Seconds); Assert.AreEqual(localTime.Milliseconds, timetz.LocalTime.Milliseconds); // LocalTime is really time local to the timezone of the TimeTZ. Assert.AreEqual(13, timetz.LocalTime.Hours); Assert.AreEqual(3, timetz.LocalTime.Minutes); Assert.AreEqual(45, timetz.LocalTime.Seconds); Assert.AreEqual(1, timetz.LocalTime.Milliseconds); }
public void ReadTimeTz() { // TODO: Decide on the DateTime kind (#346) var expectedNpgsqlTimeTz = new NpgsqlTimeTZ(13, 3, 45, 001000, new NpgsqlTimeZone(-5, 0)); var expectedDateTime = new DateTime(expectedNpgsqlTimeTz.AtTimeZone(NpgsqlTimeZone.UTC).Ticks, DateTimeKind.Utc).ToLocalTime(); using (var cmd = new NpgsqlCommand("SELECT '13:03:45.001-05'::TIMETZ", Conn)) using (var reader = cmd.ExecuteReader()) { reader.Read(); // Regular type (DateTime) Assert.That(reader.GetFieldType(0), Is.EqualTo(typeof(DateTime))); Assert.That(reader.GetDateTime(0), Is.EqualTo(expectedDateTime)); Assert.That(reader.GetFieldValue <DateTime>(0), Is.EqualTo(expectedDateTime)); Assert.That(reader[0], Is.EqualTo(expectedDateTime)); Assert.That(reader.GetValue(0), Is.EqualTo(expectedDateTime)); // Provider-specific type (NpgsqlTimeTZ) Assert.That(reader.GetTimeTZ(0), Is.EqualTo(expectedNpgsqlTimeTz)); Assert.That(reader.GetProviderSpecificFieldType(0), Is.EqualTo(typeof(NpgsqlTimeTZ))); Assert.That(reader.GetProviderSpecificValue(0), Is.EqualTo(expectedNpgsqlTimeTz)); Assert.That(reader.GetFieldValue <NpgsqlTimeTZ>(0), Is.EqualTo(expectedNpgsqlTimeTz)); } }
public void ReadTimeTz() { // TODO: Decide on the DateTime kind (#346) var expectedNpgsqlTimeTz = new NpgsqlTimeTZ(13, 3, 45, 001000, new NpgsqlTimeZone(-5, 0)); var expectedDateTime = new DateTime(expectedNpgsqlTimeTz.AtTimeZone(NpgsqlTimeZone.UTC).Ticks, DateTimeKind.Utc).ToLocalTime(); using (var cmd = new NpgsqlCommand("SELECT '13:03:45.001-05'::TIMETZ", Conn)) using (var reader = cmd.ExecuteReader()) { reader.Read(); // Regular type (DateTime) Assert.That(reader.GetFieldType(0), Is.EqualTo(typeof(DateTime))); Assert.That(reader.GetDateTime(0), Is.EqualTo(expectedDateTime)); Assert.That(reader.GetFieldValue<DateTime>(0), Is.EqualTo(expectedDateTime)); Assert.That(reader[0], Is.EqualTo(expectedDateTime)); Assert.That(reader.GetValue(0), Is.EqualTo(expectedDateTime)); // Provider-specific type (NpgsqlTimeTZ) Assert.That(reader.GetTimeTZ(0), Is.EqualTo(expectedNpgsqlTimeTz)); Assert.That(reader.GetProviderSpecificFieldType(0), Is.EqualTo(typeof(NpgsqlTimeTZ))); Assert.That(reader.GetProviderSpecificValue(0), Is.EqualTo(expectedNpgsqlTimeTz)); Assert.That(reader.GetFieldValue<NpgsqlTimeTZ>(0), Is.EqualTo(expectedNpgsqlTimeTz)); } }
public void NpgsqlTimeTzConvert() { var timetz = new NpgsqlTimeTZ(13, 3, 45.001, new NpgsqlTimeZone(-5, 0)); Assert.AreEqual(13, timetz.Hours); Assert.AreEqual(3, timetz.Minutes); Assert.AreEqual(45, timetz.Seconds); Assert.AreEqual(1, timetz.Milliseconds); Assert.AreEqual(-5, timetz.TimeZone.Hours); Assert.AreEqual(0, timetz.TimeZone.Minutes); Assert.AreEqual(0, timetz.TimeZone.Seconds); Assert.AreEqual(18, timetz.UTCTime.Hours); Assert.AreEqual(3, timetz.UTCTime.Minutes); Assert.AreEqual(45, timetz.UTCTime.Seconds); Assert.AreEqual(1, timetz.UTCTime.Milliseconds); var utcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now); // add utc time as timespan to get local time as a timespan var localTime = utcOffset + new TimeSpan(0, 18, 3, 45, 1); var localDateTime = (DateTime) timetz; Assert.AreEqual(localTime.Hours, localDateTime.Hour); Assert.AreEqual(localTime.Minutes, localDateTime.Minute); Assert.AreEqual(localTime.Seconds, timetz.LocalTime.Seconds); Assert.AreEqual(localTime.Milliseconds, timetz.LocalTime.Milliseconds); // LocalTime is really time local to the timezone of the TimeTZ. Assert.AreEqual(13, timetz.LocalTime.Hours); Assert.AreEqual(3, timetz.LocalTime.Minutes); Assert.AreEqual(45, timetz.LocalTime.Seconds); Assert.AreEqual(1, timetz.LocalTime.Milliseconds); }
internal static object ToTimeTZ(NpgsqlBackendTypeInfo typeInfo, byte[] bBackendData, Int16 typeSize, Int32 typeModifier) { string backendData = BackendEncoding.UTF8Encoding.GetString(bBackendData); return(NpgsqlTimeTZ.Parse(backendData)); }
internal static object ToTimeTZ(NpgsqlBackendTypeInfo typeInfo, String backendData, Int16 typeSize, Int32 typeModifier) { return(NpgsqlTimeTZ.Parse(backendData)); }
internal static object ChangeType(object value, Type expectedType) { if (value == null) { return(null); } Type currentType = value.GetType(); if (value is DBNull || currentType == expectedType) { return(value); } #if NET35 if (expectedType == typeof(DateTimeOffset)) { if (currentType == typeof(NpgsqlDate)) { return(new DateTimeOffset((DateTime)(NpgsqlDate)value)); } else if (currentType == typeof(NpgsqlTime)) { return(new DateTimeOffset((DateTime)(NpgsqlTime)value)); } else if (currentType == typeof(NpgsqlTimeTZ)) { NpgsqlTimeTZ timetz = (NpgsqlTimeTZ)value; return(new DateTimeOffset(timetz.Ticks, new TimeSpan(timetz.TimeZone.Hours, timetz.TimeZone.Minutes, timetz.TimeZone.Seconds))); } else if (currentType == typeof(NpgsqlTimeStamp)) { return(new DateTimeOffset((DateTime)(NpgsqlTimeStamp)value)); } else if (currentType == typeof(NpgsqlTimeStampTZ)) { NpgsqlTimeStampTZ timestamptz = (NpgsqlTimeStampTZ)value; return(new DateTimeOffset(timestamptz.Ticks, new TimeSpan(timestamptz.TimeZone.Hours, timestamptz.TimeZone.Minutes, timestamptz.TimeZone.Seconds))); } else if (currentType == typeof(NpgsqlInterval)) { return(new DateTimeOffset(((TimeSpan)(NpgsqlInterval)value).Ticks, TimeSpan.FromSeconds(0))); } else if (currentType == typeof(DateTime)) { return(new DateTimeOffset((DateTime)value)); } else if (currentType == typeof(TimeSpan)) { return(new DateTimeOffset(((TimeSpan)value).Ticks, TimeSpan.FromSeconds(0))); } else { return(DateTimeOffset.Parse(value.ToString(), CultureInfo.InvariantCulture)); } } else #endif if (expectedType == typeof(TimeSpan)) { if (currentType == typeof(NpgsqlDate)) { return(new TimeSpan(((DateTime)(NpgsqlDate)value).Ticks)); } else if (currentType == typeof(NpgsqlTime)) { return(new TimeSpan(((NpgsqlTime)value).Ticks)); } else if (currentType == typeof(NpgsqlTimeTZ)) { return(new TimeSpan(((NpgsqlTimeTZ)value).UTCTime.Ticks)); } else if (currentType == typeof(NpgsqlTimeStamp)) { return(new TimeSpan(((NpgsqlTimeStamp)value).Ticks)); } else if (currentType == typeof(NpgsqlTimeStampTZ)) { return(new TimeSpan(((DateTime)(NpgsqlTimeStampTZ)value).ToUniversalTime().Ticks)); } else if (currentType == typeof(NpgsqlInterval)) { return((TimeSpan)(NpgsqlInterval)value); } else if (currentType == typeof(DateTime)) { return(new TimeSpan(((DateTime)value).ToUniversalTime().Ticks)); } else if (currentType == typeof(DateTimeOffset)) { return(new TimeSpan(((DateTimeOffset)value).Ticks)); } else { #if NET40 return(TimeSpan.Parse(value.ToString(), CultureInfo.InvariantCulture)); #else return(TimeSpan.Parse(value.ToString())); #endif } } else if (expectedType == typeof(string)) { return(value.ToString()); } else if (expectedType == typeof(Guid)) { if (currentType == typeof(byte[])) { return(new Guid((byte[])value)); } else { return(new Guid(value.ToString())); } } else if (expectedType == typeof(DateTime)) { if (currentType == typeof(NpgsqlDate)) { return((DateTime)(NpgsqlDate)value); } else if (currentType == typeof(NpgsqlTime)) { return((DateTime)(NpgsqlTime)value); } else if (currentType == typeof(NpgsqlTimeTZ)) { return((DateTime)(NpgsqlTimeTZ)value); } else if (currentType == typeof(NpgsqlTimeStamp)) { return((DateTime)(NpgsqlTimeStamp)value); } else if (currentType == typeof(NpgsqlTimeStampTZ)) { return((DateTime)(NpgsqlTimeStampTZ)value); } else if (currentType == typeof(NpgsqlInterval)) { return(new DateTime(((TimeSpan)(NpgsqlInterval)value).Ticks)); } #if NET35 else if (currentType == typeof(DateTimeOffset)) { return(((DateTimeOffset)value).LocalDateTime); } #endif else if (currentType == typeof(TimeSpan)) { return(new DateTime(((TimeSpan)value).Ticks)); } else { return(DateTime.Parse(value.ToString(), CultureInfo.InvariantCulture)); } } else if (expectedType == typeof(byte[])) { if (currentType == typeof(Guid)) { return(((Guid)value).ToByteArray()); } else if (value is Array) { Array valueArray = (Array)value; int byteLength = Buffer.ByteLength(valueArray); byte[] bytes = new byte[byteLength]; Buffer.BlockCopy(valueArray, 0, bytes, 0, byteLength); return(bytes); } else { // expect InvalidCastException from this call return(Convert.ChangeType(value, expectedType)); } } else // long, int, short, double, float, decimal, byte, sbyte, bool, and other unspecified types { // ChangeType supports the conversions we want for above expected types return(Convert.ChangeType(value, expectedType)); } }