Example #1
0
        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);
        }
Example #2
0
        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));
                }
        }
Example #3
0
        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));
            }
        }
Example #4
0
        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);
        }
Example #5
0
        internal static object ToTimeTZ(NpgsqlBackendTypeInfo typeInfo, byte[] bBackendData, Int16 typeSize, Int32 typeModifier)
        {
            string backendData = BackendEncoding.UTF8Encoding.GetString(bBackendData);

            return(NpgsqlTimeTZ.Parse(backendData));
        }
Example #6
0
 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));
            }
        }