internal static object ToTimeStampTZ(NpgsqlBackendTypeInfo typeInfo, byte[] bBackendData, Int16 typeSize, Int32 typeModifier) { string backendData = BackendEncoding.UTF8Encoding.GetString(bBackendData); return(NpgsqlTimeStampTZ.Parse(backendData)); }
public void ProviderDateTimeSupportTimezone4() { ExecuteNonQuery("SET TIME ZONE 5"); //Should not be equal to your local time zone ! NpgsqlTimeStampTZ tsInsert = new NpgsqlTimeStampTZ(2014, 3, 28, 10, 0, 0, NpgsqlTimeZone.UTC); using (var command = new NpgsqlCommand("INSERT INTO data(field_timestamp_with_timezone) VALUES (:p1)", Conn)) { var p1 = command.Parameters.Add("p1", NpgsqlDbType.TimestampTZ); p1.Direction = ParameterDirection.Input; p1.Value = tsInsert; command.ExecuteNonQuery(); } using (var command = new NpgsqlCommand("SELECT field_timestamp_with_timezone FROM data", Conn)) { NpgsqlTimeStampTZ tsSelect; using (var reader = command.ExecuteReader()) { reader.Read(); tsSelect = reader.GetTimeStampTZ(0); } Assert.AreEqual(tsInsert.AtTimeZone(NpgsqlTimeZone.UTC), tsSelect.AtTimeZone(NpgsqlTimeZone.UTC)); } }
internal static object ToTimeStampTZ(NpgsqlBackendTypeInfo typeInfo, String backendData, Int16 typeSize, Int32 typeModifier) { return(NpgsqlTimeStampTZ.Parse(backendData)); }
public void ProviderDateTimeSupportTimezone4() { ExecuteNonQuery("SET TIME ZONE 5"); //Should not be equal to your local time zone ! NpgsqlTimeStampTZ tsInsert = new NpgsqlTimeStampTZ(2014, 3, 28, 10, 0, 0, NpgsqlTimeZone.UTC); using (var command = new NpgsqlCommand("INSERT INTO data(field_timestamp_with_timezone) VALUES (:p1)", Conn)) { var p1 = command.Parameters.Add("p1", NpgsqlDbType.TimestampTZ); p1.Direction = ParameterDirection.Input; p1.Value = tsInsert; command.ExecuteNonQuery(); } using (var command = new NpgsqlCommand("SELECT field_timestamp_with_timezone FROM data", Conn)) { NpgsqlTimeStampTZ tsSelect; using (var reader = command.ExecuteReader()) { reader.Read(); tsSelect = reader.GetTimeStampTZ(0); } Assert.AreEqual(tsInsert.AtTimeZone(NpgsqlTimeZone.UTC), tsSelect.AtTimeZone(NpgsqlTimeZone.UTC)); } }
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)); } }