Exemplo n.º 1
0
        public void Can_Write_And_Read_OffsetDateTime_Stored_As_DateTimeOffset()
        {
            var           timeZone         = DateTimeZoneProviders.Tzdb.GetSystemDefault();
            Instant       now              = TestClock.Now;
            ZonedDateTime zonedNowDateTime = now.InZone(timeZone);
            var           testEvent        = new OffsetDateTimeTestEntity
            {
                Description          = "Can_Write_And_Read_OffsetDateTime_Stored_As_DateTimeOffset",
                SystemDateTimeOffset = DateTimeOffset.Now,
                StartOffsetDateTime  = new OffsetDateTime(zonedNowDateTime.LocalDateTime, zonedNowDateTime.Offset)
            };

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(testEvent);
                    transaction.Commit();
                }

            OffsetDateTimeTestEntity retrievedEvent;

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    retrievedEvent = session.Get <OffsetDateTimeTestEntity>(testEvent.Id);
                    transaction.Commit();
                }

            Assert.That(retrievedEvent, Is.EqualTo(testEvent));
        }
Exemplo n.º 2
0
        public void Can_Write_And_Read_OffsetDateTimeNullable_Stored_As_DateTimeOffset()
        {
            var testEvent = new OffsetDateTimeTestEntity
            {
                Description          = "Can_Write_And_Read_OffsetDateTime_Stored_As_DateTimeOffset",
                SystemDateTimeOffset = DateTimeOffset.Now,
                StartOffsetDateTime  = null,
            };

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(testEvent);
                    transaction.Commit();
                }

            OffsetDateTimeTestEntity retrievedEvent;

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    retrievedEvent = session.Get <OffsetDateTimeTestEntity>(testEvent.Id);
                    transaction.Commit();
                }

            Assert.That(retrievedEvent, Is.EqualTo(testEvent));
            Assert.That(retrievedEvent.StartOffsetDateTime, Is.EqualTo(null));
        }
Exemplo n.º 3
0
        public void Can_Query_By_Equals_OffsetDateTime_Stored_As_DateTimeOffset()
        {
            var           timeZone         = DateTimeZoneProviders.Tzdb.GetSystemDefault();
            Instant       now              = TestClock.Now;
            ZonedDateTime zonedNowDateTime = now.InZone(timeZone);

            var zonedFinishDateTime = zonedNowDateTime.Plus(Duration.FromMinutes(60));
            var offsetFinishTime    = new OffsetDateTime(zonedFinishDateTime.LocalDateTime, zonedFinishDateTime.Offset);

            var testEvent = new OffsetDateTimeTestEntity
            {
                Description          = "Can_Query_By_Equals_OffsetDateTime_Stored_As_DateTimeOffset",
                SystemDateTimeOffset = DateTimeOffset.Now,
                StartOffsetDateTime  = new OffsetDateTime(zonedNowDateTime.LocalDateTime, zonedNowDateTime.Offset),
                FinishOffsetDateTime = offsetFinishTime
            };

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(testEvent);
                    transaction.Commit();
                }

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    var query          = session.Query <OffsetDateTimeTestEntity>().Where(x => x.FinishOffsetDateTime == offsetFinishTime);
                    var retrievedEvent = query.SingleOrDefault();
                    transaction.Commit();
                    Assert.That(testEvent, Is.Not.Null);
                    Assert.That(testEvent, Is.EqualTo(retrievedEvent));
                }
        }
Exemplo n.º 4
0
        public void Can_Query_By_Equals_Using_A_UtcTime_OffsetDateTime_Stored_As_DateTimeOffset()
        {
            var           timeZoneUnitedKingdom    = DateTimeZoneProviders.Tzdb.GetZoneOrNull("Europe/London");
            LocalDateTime localTimeInUnitedKingom  = new LocalDateTime(2016, 06, 01, 10, 40);
            ZonedDateTime zonedStartDateTime       = localTimeInUnitedKingom.InZoneStrictly(timeZoneUnitedKingdom);
            ZonedDateTime zonedFinishDateTime      = zonedStartDateTime.Plus(Duration.FromMinutes(60));
            ZonedDateTime matchingUtcZonedDateTime = zonedStartDateTime.WithZone(DateTimeZone.Utc);

            var offsetStartTime    = new OffsetDateTime(zonedStartDateTime.LocalDateTime, zonedStartDateTime.Offset);
            var offsetFinishTime   = new OffsetDateTime(zonedFinishDateTime.LocalDateTime, zonedFinishDateTime.Offset);
            var offsetStartTimeUtc = matchingUtcZonedDateTime.ToOffsetDateTime();

            var testEvent = new OffsetDateTimeTestEntity
            {
                Description          = "Can_Query_By_Equals_Using_A_UtcTime_OffsetDateTime_Stored_As_DateTimeOffset",
                SystemDateTimeOffset = DateTimeOffset.Now,
                StartOffsetDateTime  = offsetStartTime,
                FinishOffsetDateTime = offsetFinishTime
            };

            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(testEvent);
                    transaction.Commit();
                }

            // Even though two OffsetDateTimes may refer to the same instant...
            Assert.That(offsetStartTime.ToInstant(), Is.EqualTo(offsetStartTimeUtc.ToInstant()));
            // They are not considered equal by NodaTime unless the LocalDateTime and Offset parts are both equal.
            // (There is nothing wrong with this, it is perfectly valid logic for comparing two OffsetDateTimes.)
            Assert.That(offsetStartTime, Is.Not.EqualTo(offsetStartTimeUtc));

            // However we are storing OffsetDateTimes as DateTimeOffsets in the sql server.
            // So when using Linq and sending the expression to the sql server,
            // the sql server will convert all DateTimeOffsets to utc time before comparing them.
            // Therefore the same two OffsetDateTimes that are not equal as shown above are seen as being equal by sql.
            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    var query          = session.Query <OffsetDateTimeTestEntity>().Where(x => x.StartOffsetDateTime == offsetStartTimeUtc);
                    var retrievedEvent = query.SingleOrDefault();
                    transaction.Commit();
                    Assert.That(testEvent, Is.Not.Null);
                    Assert.That(testEvent, Is.EqualTo(retrievedEvent));
                }
        }
Exemplo n.º 5
0
        public void Can_Write_OffsetDateTime_Stored_As_DateTimeOffset()
        {
            using (ISession session = SessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    var           timeZone         = DateTimeZoneProviders.Tzdb.GetSystemDefault();
                    Instant       now              = TestClock.Now;
                    ZonedDateTime zonedNowDateTime = now.InZone(timeZone);

                    var testEvent = new OffsetDateTimeTestEntity
                    {
                        Description          = "Can_Write_OffsetDateTime_Stored_As_DateTimeOffset",
                        SystemDateTimeOffset = DateTimeOffset.Now,
                        StartOffsetDateTime  = new OffsetDateTime(zonedNowDateTime.LocalDateTime, zonedNowDateTime.Offset)
                    };
                    session.Save(testEvent);
                    transaction.Commit();

                    Assert.That(testEvent.Id, Is.Not.Null);
                }
        }