public void GreaterThanOperator() { var a = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 8, 0, 0, TimeSpan.Zero)); var b = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 9, 0, 0, TimeSpan.Zero)); Assert.IsTrue(b > a); }
public static DateTimeOffset GetCorrectedDate(this DATETIMETYPE date, TimeZoneInfo quickBooksTimeZone) { var dateTime = date.ToDateTime(); var correctedOffset = quickBooksTimeZone.GetUtcOffset(dateTime); return(new DateTimeOffset(dateTime, correctedOffset)); }
public void EqualsOperatorBothNull() { DATETIMETYPE a = null; DATETIMETYPE b = null; Assert.IsTrue(a == b); }
public void EqualsOperatorRightNull() { DATETIMETYPE a = new DATETIMETYPE(2019, 1, 1); DATETIMETYPE b = null; Assert.IsFalse(a == b); }
public void EqualsOperatorSameValue() { var a = new DATETIMETYPE(2019, 1, 1); var b = new DATETIMETYPE(2019, 1, 1); Assert.IsTrue(a == b); }
public void EqualsOperatorSameValueDifferentConstruction() { var a = new DATETIMETYPE(2019, 1, 1); var b = new DATETIMETYPE(new DateTime(2019, 1, 1)); Assert.IsTrue(a == b); }
public void ToStringDoesIncludesOffsetWhenConstructedFromUtcDateTime() { var date = new DateTime(2019, 2, 6, 17, 24, 0, DateTimeKind.Utc); var dt = new DATETIMETYPE(date); Assert.AreEqual("2019-02-06T17:24:00+00:00", dt.ToString(true)); }
public void CompareIgnoresOffsetWhenOneDoNotHaveOffset() { var a = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 8, 0, 0, 0, TimeSpan.FromHours(-10))); var b = new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Unspecified)); Assert.AreEqual(0, a.CompareTo(b)); }
public void ToStringDoesNotIncludeOffsetWhenConstructedFromUnspecifiedDateTime() { var date = new DateTime(2019, 2, 6, 17, 24, 0, DateTimeKind.Unspecified); var dt = new DATETIMETYPE(date); Assert.AreEqual("2019-02-06T17:24:00", dt.ToString()); }
public void ThrowsWhenConstructedWithDateTimeAfterEpoch() { Assert.Throws <ArgumentOutOfRangeException>(() => { var date = new DATETIMETYPE(new DateTime(2038, 2, 1, 0, 0, 0)); }); }
public void ToDateTimeEqualsInputWhenConstructedFromLocalDateTime() { var input = new DateTime(2018, 8, 1, 0, 0, 0, DateTimeKind.Local); var dt = new DATETIMETYPE(input); var output = dt.ToDateTime(); Assert.AreEqual(input, output); }
public void DateTimeWithDSTIsNotHandledByQuickBooks() { // This should read 2015-04-03T10:06:17-07:00 // But QuickBooks does not handle DST. So we need to handle it ourself. var dt = new DATETIMETYPE("2015-04-03T10:06:17-08:00", QuickBooksTestHelper.GetPacificStandardTimeZoneInfo()); Assert.AreEqual(17, dt.ToDateTime().ToUniversalTime().Hour); }
public void DateTimeWithDSTIsNotHandledByQuickBooks() { // This should read 2015-04-03T10:06:17-07:00 // But QuickBooks does not handle DST. So we need to handle it ourself. var dt = new DATETIMETYPE("2015-04-03T10:06:17-08:00", QuickBooksTestHelper.GetPacificStandardTimeZoneInfo()); Assert.AreEqual(17, dt.ToDateTime().ToUniversalTime().Hour); }
public void MidnightIsAssumedIfTimeComponentMissing() { var dt = DATETIMETYPE.Parse("2019-02-06"); var date = dt.ToDateTime(); Assert.AreEqual("2019-02-06T00:00:00", dt.ToString()); Assert.AreEqual(new DateTime(2019, 2, 6, 0, 0, 0), date); }
public static DATETIMETYPE GetQueryFromModifiedDate(this DATETIMETYPE dateTimeType) { if (dateTimeType == null) { return(DATETIMETYPE.MinValue); } return(dateTimeType.Add(TimeSpan.FromSeconds(1))); }
public void ToDateTimeIsLocalKindWhenConstructedFromLocalDateTime() { // This situation only covers when a consumer of this library is converting back to DateTime after initializing from DateTime // No QuickBooks parsed DATETIMETYPE will ever have a Local kind var dt = new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Local)); Assert.AreEqual(DateTimeKind.Local, dt.ToDateTime().Kind); }
protected override async Task <bool> ExecuteRequestAsync(IAuthenticatedTicket authenticatedTicket, CustomerQueryRqType request) { // Let's see if we had a previous saved time so we don't re-query the entire QuickBooks every time. var previouslySavedFromModified = (await dbContext.QbSettings .FirstOrDefaultAsync(m => m.Name == LAST_MODIFIED_CUSTOMER))?.Value; request.FromModifiedDate = DATETIMETYPE.ParseOrDefault(previouslySavedFromModified, DATETIMETYPE.MinValue).GetQueryFromModifiedDate(); return(await base.ExecuteRequestAsync(authenticatedTicket, request)); }
public void CompareAccountsForOffset() { // A's instant (moment in time globally) is later, but its DateTime is earlier var a = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 6, 0, 0, 0, TimeSpan.FromHours(-3))); // B's instant is earlier, but its DateTime is later var b = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 8, 0, 0, 0, TimeSpan.Zero)); Assert.AreEqual(1, a.CompareTo(b)); }
public void EqualsOperatorSameInstantDifferentOffsets() { // Even though these are two different offsets, they represent the same moment in time and both have offsets supplied, so should be equal var a = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 12, 0, 0, TimeSpan.FromHours(-1))); var b = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 11, 0, 0, TimeSpan.FromHours(-2))); Assert.AreEqual(0, a.CompareTo(b)); Assert.IsTrue(a == b); }
private static DATETIMETYPE[] ToDateTimeIsUtcForZeroOffsetsInput() { return(new[] { DATETIMETYPE.Parse("2019-02-06T17:24:00Z"), DATETIMETYPE.Parse("2019-02-06T17:24:00+00:00"), new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Utc)), DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 2, 6, 17, 24, 0, TimeSpan.Zero)), }); }
private static DATETIMETYPE[] ToDateTimeIsUnspecifiedForNonZeroAndEmptyOffsetsInputs() { return(new[] { DATETIMETYPE.Parse("2019-02-06T17:24:00"), DATETIMETYPE.Parse("2019-02-07T17:24:00-08:00"), new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Unspecified)), DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 2, 9, 17, 24, 0, TimeSpan.FromHours(-8))) }); }
public void OffsetMatchesLocalMachineZoneWhenConstructedFromLocalDateTime() { var localDate = new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Local); var zone = TimeZoneInfo.Local; var offset = zone.GetUtcOffset(localDate); var dt = new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Local)); Assert.AreEqual(offset, dt.UncorrectedDate.Value.Offset); }
public void EqualsOperatorSameTimeOneMissingOffset() { // While these will compare the same, they should not be considered equal var a = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 1, 1, 8, 0, 0, 0, TimeSpan.Zero)); var b = new DATETIMETYPE(new DateTime(2019, 1, 1, 8, 0, 0, 0, DateTimeKind.Unspecified)); Assert.AreEqual(0, a.CompareTo(b)); Assert.IsFalse(a == b); }
public void ToStringIncludesOffsetWhenConstructedFromLocalDateTime() { var date = new DateTime(2019, 2, 6, 17, 24, 0, DateTimeKind.Local); // Note, this will be +00:00, not Z on a UTC machine, because of DateTimeKind.Local var offset = date.ToString(" K").Trim(); var dt = new DATETIMETYPE(date); Assert.AreEqual($"2019-02-06T17:24:00{offset}", dt.ToString(true)); }
public static async Task SaveIfNewerAsync(this ApplicationDbContext applicationDbContext, string setting, QbSync.QbXml.Objects.DATETIMETYPE moment) { if (moment != null) { var savedSetting = await applicationDbContext.QbSettings.FirstOrDefaultAsync(m => m.Name == setting); var existingDateTimeType = DATETIMETYPE.ParseOrDefault(savedSetting?.Value, DATETIMETYPE.MinValue); if (moment > existingDateTimeType) { if (savedSetting == null) { savedSetting = new QbSetting { Name = setting }; applicationDbContext.QbSettings.Add(savedSetting); } savedSetting.Value = moment.ToString(); await applicationDbContext.SaveChangesAsync(); } } }
public void RoundTripsAsExpectedWithoutOffset() { // Simulated value returned from QuickBooks, that we want to be sent the exact same way to future queries var str = "2019-02-20T10:36:51"; var date = DATETIMETYPE.Parse(str); // DATETIMETYPE > string Assert.AreEqual(str, date.ToString()); // DATETIMETYPE > string > DATETIMETYPE > string Assert.AreEqual(str, DATETIMETYPE.Parse(date.ToString()).ToString()); // DATETIMETYPE > DateTime > DATETIMETYPE > string Assert.AreEqual(str, new DATETIMETYPE(date.ToDateTime()).ToString()); // DATETIMETYPE > DateTime > string > DATETIMETYPE > string Assert.AreEqual(str, DATETIMETYPE.Parse(date.ToDateTime().ToString()).ToString()); // DATETIMETYPE > DateTime > string > DateTime > DATETIMETYPE > string Assert.AreEqual(str, new DATETIMETYPE(DateTime.Parse(date.ToDateTime().ToString())).ToString()); // DATETIMETYPE > DateTime > Ticks > DateTime > DATETIMETYPE > string Assert.AreEqual(str, new DATETIMETYPE(new DateTime(date.ToDateTime().Ticks)).ToString()); }
public void DateTimeInvalidSentByQuickBooks() { var dt = new DATETIMETYPE("0000-00-00", QuickBooksTestHelper.GetPacificStandardTimeZoneInfo()); Assert.AreEqual(DateTime.MinValue, dt.ToDateTime()); }
public void DateTimeWithDSTNothingHappensWhenNoTimzoneSupplied() { var dt = new DATETIMETYPE("2015-04-03T10:06:17-08:00"); Assert.AreEqual(18, dt.ToDateTime().ToUniversalTime().Hour); }
public string ToStringOffsetExistenceMatchesInputWhenParsingFromStringWithOffset(string input) { return(DATETIMETYPE.Parse(input).ToString(true)); }
public void DateTimeWithNoDSTIsNotHandledByQuickBooks() { var dt = new DATETIMETYPE("2015-03-01T10:06:17-08:00", QuickBooksTestHelper.GetPacificStandardTimeZoneInfo()); Assert.AreEqual(18, dt.ToDateTime().ToUniversalTime().Hour); }
public void ToDateTimeIsUnspecifiedForNonZeroAndEmptyOffsets(DATETIMETYPE input) { Assert.AreEqual(DateTimeKind.Unspecified, input.ToDateTime().Kind); }
public void UsesOffsetAsSuppliedWhenConstructedFromDateTimeOffset() { var dt = DATETIMETYPE.FromUncorrectedDate(new DateTimeOffset(2019, 2, 6, 17, 24, 0, TimeSpan.FromHours(-8))); Assert.AreEqual("2019-02-06T17:24:00-08:00", dt.ToString(true)); }
public void ToDateTimeIsUtcForZeroOffsets(DATETIMETYPE input) { Assert.AreEqual(DateTimeKind.Utc, input.ToDateTime().Kind); }
public void UsesNoOffsetWhenConstructedFromDateComponentsWithoutOffset() { var dt = new DATETIMETYPE(2019, 2, 6, 17, 24, 0); Assert.AreEqual("2019-02-06T17:24:00", dt.ToString()); }