Esempio n. 1
0
        private Resume CreateResume(Candidate candidate)
        {
            var resume = new Resume();

            // Set last two job details.

            var currentJob = new Job {
                Dates = new PartialDateRange(PartialDate.Parse("January 2005")), Title = "Coder", Description = "description", Company = "LinkMe"
            };
            var previousJob = new Job {
                Dates = new PartialDateRange(PartialDate.Parse("January 2004"), PartialDate.Parse("January 2005")), Title = "Developer", Description = "old description", Company = "OC"
            };

            resume.Jobs = new List <Job> {
                currentJob, previousJob
            };

            // Set education section.

            var school = new School {
                CompletionDate = new PartialCompletionDate(PartialDate.Parse("January 2004")), Institution = "LinkMe Mental Asylum", Degree = "Bachelor of Boredom", Major = "Meetings", Description = "description", City = "Melbourne", Country = "Australia"
            };

            resume.Schools = new List <School> {
                school
            };

            // Affiliations.

            resume.Affiliations = "What's this?";
            resume.Interests    = Interests;

            _candidateResumesCommand.CreateResume(candidate, resume);
            return(resume);
        }
Esempio n. 2
0
 private static string convertToXmlString(object value)
 {
     return(value switch
     {
         bool bl => XmlConvert.ToString(bl),
         Byte by => XmlConvert.ToString(by),               // Not used in FHIR serialization
         Char cr => XmlConvert.ToString(cr),               // Not used in FHIR serialization
         DateTime dt => XmlConvert.ToString(dt, FMT_FULL), // Obsolete: use DateTimeOffset instead!!
         decimal dec => XmlConvert.ToString(dec),
         Double dbl => XmlConvert.ToString(dbl),
         Int16 i16 => XmlConvert.ToString(i16),
         Int32 i32 => XmlConvert.ToString(i32),
         Int64 i64 => XmlConvert.ToString(i64),        // Not used in FHIR serialization
         SByte sb => XmlConvert.ToString(sb),          // Not used in FHIR serialization
         Single sing => XmlConvert.ToString(sing),     // Not used in FHIR serialization
         UInt16 uint16 => XmlConvert.ToString(uint16), // Not used in FHIR serialization
         UInt32 uint32 => XmlConvert.ToString(uint32), // Not used in FHIR serialization
         UInt64 uint64 => XmlConvert.ToString(uint64), // Not used in FHIR serialization
         byte[] barr => System.Convert.ToBase64String(barr),
         DateTimeOffset dto => XmlConvert.ToString(dto, FMT_FULL),
         Uri uri => uri.ToString(),
         PartialDateTime pdt => pdt.ToString(),
         PartialTime pt => pt.ToString(),
         PartialDate pd => pd.ToString(),
         Enum en => en.GetLiteral(),
         BigInteger bi => bi.ToString(),
         Quantity q => q.ToString(),
         _ => throw Error.NotSupported($"Cannot convert '{value.GetType().Name}' value '{value}' to string"),
     });
        /// <summary>
        /// FhirPath toDate() function.
        /// </summary>
        /// <param name="focus"></param>
        /// <returns></returns>
        public static PartialDate?ToDate(this ITypedElement focus)
        {
            var val = focus?.Value;

            if (val == null)
            {
                return(null);
            }

            switch (val)
            {
            case PartialDate pt:
                return(pt);

            case string s:
                return(convertString(s));

            default:
                return(null);
            }

            PartialDate?convertString(string si)
            {
                return(PartialDate.TryParse(si, out var result) ?
                       result : (PartialDate?)null);
            }
        }
Esempio n. 4
0
        protected override void Update(Member member, Candidate candidate, Resume resume, ref bool sendSuggestedJobs, ref int?referralSourceId, bool resumeUploaded)
        {
            var newDate = new PartialDate(1972, 8);

            Assert.AreNotEqual(member.DateOfBirth, newDate);
            member.DateOfBirth = newDate;
        }
Esempio n. 5
0
 public MockLifeSpan(DateTime begin, DateTime?end = null)
 {
     Begin = new PartialDate(begin.Year, begin.Month, begin.Day);
     if (end.HasValue)
     {
         End = new PartialDate(end.Value.Year, end.Value.Month, end.Value.Day);
     }
 }
Esempio n. 6
0
        public ISearchBuilder FilterByPartialNotificationDate(PartialDate partialNotificationDate)
        {
            if (!(partialNotificationDate == null || partialNotificationDate.IsEmpty()))
            {
                partialNotificationDate.TryConvertToDateTimeRange(out DateTime? dateRangeStart, out DateTime? dateRangeEnd);
                notificationIQ = notificationIQ.Where(s => s.NotificationDate >= dateRangeStart && s.NotificationDate < dateRangeEnd);
            }

            return(this);
        }
Esempio n. 7
0
        public ISearchBuilder FilterByPartialDob(PartialDate partialDob)
        {
            if (!(partialDob == null || partialDob.IsEmpty()))
            {
                partialDob.TryConvertToDateTimeRange(out DateTime? dateRangeStart, out DateTime? dateRangeEnd);
                notificationIQ = notificationIQ.Where(s => s.PatientDetails.Dob >= dateRangeStart && s.PatientDetails.Dob < dateRangeEnd);
            }

            return(this);
        }
Esempio n. 8
0
 void accept(string testInput, int?y, int?m, int?d, PartialPrecision?p, TimeSpan?o)
 {
     Assert.IsTrue(PartialDate.TryParse(testInput, out PartialDate parsed), "TryParse");
     Assert.AreEqual(y, parsed.Years, "years");
     Assert.AreEqual(m, parsed.Months, "months");
     Assert.AreEqual(d, parsed.Days, "days");
     Assert.AreEqual(o, parsed.Offset, "offset");
     Assert.AreEqual(p, parsed.Precision, "precision");
     Assert.AreEqual(testInput, parsed.ToString(), "ToString");
 }
Esempio n. 9
0
        private static PartialDate?ValidateDate(string month, string year)
        {
            PartialDate?date;

            if (string.IsNullOrEmpty(month))
            {
                return(PartialDate.TryParse("Jan " + year, out date) ? date : null);
            }
            return(PartialDate.TryParse(month + " " + year, out date) ? date : null);
        }
Esempio n. 10
0
        public void CheckPartialDateAttributeReturnsFalseForNoYear()
        {
            var partialDate = new PartialDate()
            {
                Day = "1", Month = "2", Year = null
            };
            var attribute = new ValidPartialDateAttribute();
            var result    = attribute.IsValid(partialDate);

            Assert.False(result);
        }
Esempio n. 11
0
        public void ParseableYearOnlyDate_CanConvertReturnsTrueAndDateTimeRange(PartialDate partialDate, DateTime expectedResultRangeStart, DateTime expectedResultRangeEnd)
        {
            // Arrange
            // Act
            var canConvert = partialDate.TryConvertToDateTimeRange(out DateTime? resultRangeStart, out DateTime? resultRangeEnd);

            // Assert
            Assert.True(canConvert);
            Assert.Equal(expectedResultRangeStart, resultRangeStart);
            Assert.Equal(expectedResultRangeEnd, resultRangeEnd);
        }
Esempio n. 12
0
        public void CheckPartialDateAttributeReturnsFalseForDayButNoMonth()
        {
            var partialDate = new PartialDate()
            {
                Day = "1", Month = null, Year = "1990"
            };
            var attribute = new ValidPartialDateAttribute();
            var result    = attribute.IsValid(partialDate);

            Assert.False(result);
        }
Esempio n. 13
0
        public ISearchBuilder FilterByPartialDob(PartialDate partialDob)
        {
            if (!(partialDob == null || partialDob.IsEmpty()))
            {
                partialDob.TryConvertToDateTimeRange(out var dateRangeStart, out var dateRangeEnd);
                AppendCondition("dmg.DateOfBirth >= @dobDateRangeStart AND dmg.DateOfBirth < @dobDateRangeEnd");
                parameters.dobDateRangeStart = dateRangeStart;
                parameters.dobDateRangeEnd   = dateRangeEnd;
            }

            return(this);
        }
        public void NextReleaseDate_Ok()
        {
            var releaseDate = new PartialDate {
                Day = "01"
            };
            var release = new Release
            {
                NextReleaseDate = releaseDate
            };

            Assert.Equal(releaseDate, release.NextReleaseDate);
        }
Esempio n. 15
0
        public void NextReleaseDate_Ok()
        {
            var releaseDate = new PartialDate {
                Year = "2021", Month = "1"
            };
            var release = new Release
            {
                NextReleaseDate = releaseDate
            };

            Assert.Equal(releaseDate, release.NextReleaseDate);
        }
Esempio n. 16
0
        public ISearchBuilder FilterByPartialNotificationDate(PartialDate partialNotificationDate)
        {
            if (!(partialNotificationDate == null || partialNotificationDate.IsEmpty()))
            {
                partialNotificationDate.TryConvertToDateTimeRange(out var dateRangeStart, out var dateRangeEnd);
                AppendCondition("n.NotificationDate >= @notificationDateRangeStart AND n.NotificationDate < @notificationDateRangeEnd");
                parameters.notificationDateRangeStart = dateRangeStart;
                parameters.notificationDateRangeEnd   = dateRangeEnd;
            }

            return(this);
        }
Esempio n. 17
0
 public void CheckOrdering()
 {
     Assert.AreEqual(0, PartialDate.Parse("2010-06-04").CompareTo(PartialDate.Parse("2010-06-04")));
     Assert.AreEqual(0, PartialDate.Parse("2010-06").CompareTo(PartialDate.Parse("2010-06")));
     Assert.AreEqual(0, PartialDate.Parse("2010").CompareTo(PartialDate.Parse("2010")));
     Assert.AreEqual(1, PartialDate.Parse("2010-06-04").CompareTo(PartialDate.Parse("2010-06-03")));
     Assert.AreEqual(1, PartialDate.Parse("2010-07").CompareTo(PartialDate.Parse("2010-06")));
     Assert.AreEqual(1, PartialDate.Parse("2017").CompareTo(PartialDate.Parse("2015")));
     Assert.AreEqual(-1, PartialDate.Parse("2010-06-04").CompareTo(PartialDate.Parse("2010-06-05")));
     Assert.AreEqual(-1, PartialDate.Parse("2010-05").CompareTo(PartialDate.Parse("2010-06")));
     Assert.AreEqual(-1, PartialDate.Parse("2010").CompareTo(PartialDate.Parse("2015")));
 }
Esempio n. 18
0
        public void ToDateTimeOffset()
        {
            var plusOne = new TimeSpan(1, 0, 0);
            var plusTwo = new TimeSpan(2, 0, 0);

            var partialDate    = PartialDate.Parse("2010-06-04");
            var dateTimeOffset = partialDate.ToDateTimeOffset(12, 3, 4, 5, plusOne);

            Assert.AreEqual(2010, dateTimeOffset.Year);
            Assert.AreEqual(06, dateTimeOffset.Month);
            Assert.AreEqual(04, dateTimeOffset.Day);
            Assert.AreEqual(12, dateTimeOffset.Hour);
            Assert.AreEqual(3, dateTimeOffset.Minute);
            Assert.AreEqual(4, dateTimeOffset.Second);
            Assert.AreEqual(5, dateTimeOffset.Millisecond);
            Assert.AreEqual(plusOne, dateTimeOffset.Offset);

            partialDate    = PartialDate.Parse("2010-06-04+02:00");
            dateTimeOffset = partialDate.ToDateTimeOffset(12, 3, 4, 5, plusOne);
            Assert.AreEqual(2010, dateTimeOffset.Year);
            Assert.AreEqual(06, dateTimeOffset.Month);
            Assert.AreEqual(04, dateTimeOffset.Day);
            Assert.AreEqual(12, dateTimeOffset.Hour);
            Assert.AreEqual(3, dateTimeOffset.Minute);
            Assert.AreEqual(4, dateTimeOffset.Second);
            Assert.AreEqual(5, dateTimeOffset.Millisecond);
            Assert.AreEqual(plusTwo, dateTimeOffset.Offset);

            partialDate    = PartialDate.Parse("2010-06");
            dateTimeOffset = partialDate.ToDateTimeOffset(12, 3, 4, 5, plusOne);
            Assert.AreEqual(2010, dateTimeOffset.Year);
            Assert.AreEqual(06, dateTimeOffset.Month);
            Assert.AreEqual(1, dateTimeOffset.Day);
            Assert.AreEqual(12, dateTimeOffset.Hour);
            Assert.AreEqual(3, dateTimeOffset.Minute);
            Assert.AreEqual(4, dateTimeOffset.Second);
            Assert.AreEqual(5, dateTimeOffset.Millisecond);
            Assert.AreEqual(plusOne, dateTimeOffset.Offset);

            partialDate    = PartialDate.Parse("2010");
            dateTimeOffset = partialDate.ToDateTimeOffset(12, 3, 4, 5, plusOne);
            Assert.AreEqual(2010, dateTimeOffset.Year);
            Assert.AreEqual(1, dateTimeOffset.Month);
            Assert.AreEqual(1, dateTimeOffset.Day);
            Assert.AreEqual(12, dateTimeOffset.Hour);
            Assert.AreEqual(3, dateTimeOffset.Minute);
            Assert.AreEqual(4, dateTimeOffset.Second);
            Assert.AreEqual(5, dateTimeOffset.Millisecond);
            Assert.AreEqual(plusOne, dateTimeOffset.Offset);
        }
Esempio n. 19
0
        public void GetToday()
        {
            var today  = PartialDate.Today();
            var today2 = DateTimeOffset.Now;   // just don't run this unit test a split second before midnight

            Assert.AreEqual(today2.Year, today.Years);
            Assert.AreEqual(today2.Month, today.Months);
            Assert.AreEqual(today2.Day, today.Days);
            Assert.AreEqual(PartialPrecision.Day, today.Precision);
            Assert.IsFalse(today.HasOffset);

            today = PartialDate.Today(includeOffset: true);
            Assert.IsTrue(today.HasOffset);
        }
Esempio n. 20
0
        public void IfDateHasNoYear_CanConvertReturnsFalse()
        {
            // Arrange
            var partialDate = new PartialDate()
            {
                Day = null, Month = "2", Year = null
            };

            // Act
            var canConvert = partialDate.TryConvertToDateTimeRange(out _, out _);

            // Assert
            Assert.False(canConvert);
        }
Esempio n. 21
0
 public void DateComparison()
 {
     Assert.IsTrue(PartialDate.Parse("2010-06-03") > PartialDate.Parse("2010-05-03"));
     Assert.IsTrue(PartialDate.Parse("2010-06-03") < PartialDate.Parse("2010-07-03"));
     Assert.IsTrue(PartialDate.Parse("2010-12-05") > PartialDate.Parse("2010-12-04"));
     Assert.IsTrue(PartialDate.Parse("2010-12-03") < PartialDate.Parse("2010-12-04"));
     Assert.IsTrue(PartialDate.Parse("2011") > PartialDate.Parse("2010"));
     Assert.IsTrue(PartialDate.Parse("2011") < PartialDate.Parse("2013"));
     Assert.IsTrue(PartialDate.Parse("2011-03") > PartialDate.Parse("2011-02"));
     Assert.IsTrue(PartialDate.Parse("2011-03") < PartialDate.Parse("2011-04"));
     Assert.IsTrue(PartialDate.Parse("2010-12-03+02:00") < PartialDate.Parse("2010-12-04+02:00"));
     Assert.IsTrue(PartialDate.Parse("2010-12-05+02:00") > PartialDate.Parse("2010-12-04+02:00"));
     Assert.IsTrue(PartialDate.Parse("2010-12-03+06:00") < PartialDate.Parse("2010-12-04+02:00"));
     Assert.IsTrue(PartialDate.Parse("2010-12-05+08:00") > PartialDate.Parse("2010-12-04+02:00"));
 }
Esempio n. 22
0
        private static bool TryGetDate(string dateString, bool isStart, out PartialDate?date)
        {
            dateString = Clean(dateString);

            if (string.Compare(dateString, CurrentDateText, StringComparison.InvariantCultureIgnoreCase) == 0 ||
                string.Compare(dateString, PresentDateText, StringComparison.InvariantCultureIgnoreCase) == 0 ||
                string.IsNullOrEmpty(dateString))
            {
                date = null;
                return(true);
            }

            // Try to parse as DateTime directly. Only interested in month and year.

            DateTime datetime;

            if (DateTime.TryParse(dateString, out datetime))
            {
                if (datetime.Year <= SentinelYear)
                {
                    date = null;
                    return(true);
                }

                date = new PartialDate(datetime.Year, datetime.Month);
                return(true);
            }

            // May be just a year so try to parse that.

            int year;

            if (int.TryParse(dateString, out year))
            {
                if (year <= SentinelYear)
                {
                    date = null;
                    return(true);
                }

                date = new PartialDate(year, isStart ? 1 : 12);
                return(true);
            }

            date = null;
            return(false);
        }
Esempio n. 23
0
        public void FhirPath_Lex_Date()
        {
            var parser = Lexer.Date.End();

            accept("@2018-04-05");
            accept("@2018-04");
            accept("@2018");

            reject("@2018-04-05T");
            reject("@2018-04-05TZ");
            reject("@2018-04-05Z");
            reject("@2018-04-05T10:00:00");
            reject("@2018-04-05T10:00:00Z");

            void accept(string s) => AssertParser.SucceedsMatch(parser, s, PartialDate.Parse(s.Substring(1)));
            void reject(string s) => AssertParser.FailsMatch(parser, s);
        }
Esempio n. 24
0
        public void FhirPath_Gramm_Literal()
        {
            var parser = Grammar.Literal.End();

            AssertParser.SucceedsMatch(parser, "'hi there'", new ConstantExpression("hi there"));
            AssertParser.SucceedsMatch(parser, "3", new ConstantExpression(3L));
            AssertParser.SucceedsMatch(parser, "3.14", new ConstantExpression(3.14m));
            AssertParser.SucceedsMatch(parser, "@2013-12", new ConstantExpression(PartialDate.Parse("2013-12")));
            AssertParser.SucceedsMatch(parser, "@2013-12T", new ConstantExpression(PartialDateTime.Parse("2013-12")));
            AssertParser.SucceedsMatch(parser, "@T12:23:34", new ConstantExpression(PartialTime.Parse("12:23:34")));
            AssertParser.SucceedsMatch(parser, "true", new ConstantExpression(true));
            AssertParser.SucceedsMatch(parser, "@2014-12-13T12:00:00+02:00", new ConstantExpression(PartialDateTime.Parse("2014-12-13T12:00:00+02:00")));

            AssertParser.FailsMatch(parser, "%constant");
            AssertParser.FailsMatch(parser, "`quotedstring`");
            AssertParser.FailsMatch(parser, "A23identifier");
        }
Esempio n. 25
0
        protected override PartialDate?GetDateOfBirth(XmlDocument xmlDoc)
        {
            var dob = Get(xmlDoc, "//contact/personal/dob");

            if (string.IsNullOrEmpty(dob))
            {
                dob = Get(xmlDoc, "//resume/statements/personal/dob");
                if (string.IsNullOrEmpty(dob))
                {
                    return(null);
                }
            }

            PartialDate?date;

            PartialDate.TryParse(dob, out date);
            return(date);
        }
 protected CachedReleaseViewModel(
     Guid id,
     string title,
     string yearTitle,
     string coverageTitle,
     string releaseName,
     PartialDate nextReleaseDate,
     DateTime?published,
     string slug,
     ReleaseTypeViewModel type,
     List <ReleaseNoteViewModel> updates,
     List <ContentSectionViewModel> content,
     ContentSectionViewModel summarySection,
     ContentSectionViewModel headlinesSection,
     ContentSectionViewModel keyStatisticsSection,
     ContentSectionViewModel keyStatisticsSecondarySection,
     List <FileInfo> downloadFiles,
     string metaGuidance,
     string preReleaseAccessList,
     List <LinkViewModel> relatedInformation,
     DateTime?dataLastPublished)
 {
     Id                            = id;
     Title                         = title;
     YearTitle                     = yearTitle;
     CoverageTitle                 = coverageTitle;
     ReleaseName                   = releaseName;
     NextReleaseDate               = nextReleaseDate;
     Published                     = published;
     Slug                          = slug;
     Type                          = type;
     Updates                       = updates;
     Content                       = content;
     SummarySection                = summarySection;
     HeadlinesSection              = headlinesSection;
     KeyStatisticsSection          = keyStatisticsSection;
     KeyStatisticsSecondarySection = keyStatisticsSecondarySection;
     DownloadFiles                 = downloadFiles;
     MetaGuidance                  = metaGuidance;
     PreReleaseAccessList          = preReleaseAccessList;
     RelatedInformation            = relatedInformation;
     DataLastPublished             = dataLastPublished;
 }
Esempio n. 27
0
        public void FhirPath_Gramm_Term()
        {
            var parser = Grammar.Term.End();

            AssertParser.SucceedsMatch(parser, "childname", new ChildExpression(AxisExpression.This, "childname"));
            AssertParser.SucceedsMatch(parser, "$this", AxisExpression.This);
            AssertParser.SucceedsMatch(parser, "doSomething()", new FunctionCallExpression(AxisExpression.This, "doSomething", TypeSpecifier.Any));
            AssertParser.SucceedsMatch(parser, "doSomething('hi', 3.14)", new FunctionCallExpression(AxisExpression.This, "doSomething", TypeSpecifier.Any,
                                                                                                     new ConstantExpression("hi"), new ConstantExpression(3.14m)));
            AssertParser.SucceedsMatch(parser, "%external", new VariableRefExpression("external"));
            AssertParser.SucceedsMatch(parser, "@2013-12", new ConstantExpression(PartialDate.Parse("2013-12")));
            AssertParser.SucceedsMatch(parser, "@2013-12T", new ConstantExpression(PartialDateTime.Parse("2013-12")));
            AssertParser.SucceedsMatch(parser, "3", new ConstantExpression(3L));
            AssertParser.SucceedsMatch(parser, "true", new ConstantExpression(true));
            AssertParser.SucceedsMatch(parser, "(3)", new ConstantExpression(3L));
            AssertParser.SucceedsMatch(parser, "{}", NewNodeListInitExpression.Empty);
            AssertParser.SucceedsMatch(parser, "@2014-12-13T12:00:00+02:00", new ConstantExpression(PartialDateTime.Parse("2014-12-13T12:00:00+02:00")));
            AssertParser.SucceedsMatch(parser, "78 'kg'", new ConstantExpression(new Quantity(78m, "kg")));
            AssertParser.SucceedsMatch(parser, "10.1 'mg'", new ConstantExpression(new Quantity(10.1m, "mg")));
        }
Esempio n. 28
0
        private void CreateFriends(Guid memberId, PersonalVisibility firstDegree, int start, int count, out IList <Member> friends, out IList <Candidate> candidates, out IList <Resume> resumes)
        {
            friends    = new List <Member>();
            candidates = new List <Candidate>();
            resumes    = new List <Resume>();

            for (var index = start; index < start + count; index++)
            {
                var friend    = _memberAccountsCommand.CreateTestMember(index);
                var candidate = _candidatesCommand.GetCandidate(friend.Id);

                // Set values.

                candidate.Status = CandidateStatus.OpenToOffers;

                var resume = new Resume
                {
                    Jobs = new List <Job> {
                        new Job {
                            Dates = new PartialDateRange(PartialDate.Parse("01/01/1970")), Title = string.Format(CurrentJobsTemplate, index)
                        }
                    }
                };

                _locationQuery.ResolvePostalSuburb(friend.Address.Location, Australia, Suburb + " " + Postcode + " " + CountrySubdivision);
                friend.VisibilitySettings.Personal.FirstDegreeVisibility = firstDegree;

                // Save.

                _memberAccountsCommand.UpdateMember(friend);
                _candidatesCommand.UpdateCandidate(candidate);
                _candidateResumesCommand.CreateResume(candidate, resume);

                friends.Add(friend);
                candidates.Add(candidate);
                resumes.Add(resume);

                _networkingCommand.CreateFirstDegreeLink(memberId, friend.Id);
            }
        }
Esempio n. 29
0
        private static PartialDateRange GetDateTimeRange(string startDate, string endDate)
        {
            var start = string.IsNullOrEmpty(startDate)
                ? null
                : startDate == "N/A"
                    ? (PartialDate?)null
                    : PartialDate.Parse(startDate);

            if (string.IsNullOrEmpty(endDate) || endDate == "N/A")
            {
                return(null);
            }

            if (endDate == "Current")
            {
                return(start == null
                    ? new PartialDateRange()
                    : new PartialDateRange(start.Value));
            }

            return(new PartialDateRange(start, PartialDate.Parse(endDate)));
        }
Esempio n. 30
0
        public void FromDateTimeOffset()
        {
            var plusOne = new TimeSpan(1, 0, 0);

            var dateTimeOffset = new DateTimeOffset(2019, 7, 23, 13, 45, 56, 567, plusOne);
            var partialDate    = PartialDate.FromDateTimeOffset(dateTimeOffset);

            Assert.AreEqual(2019, partialDate.Years);
            Assert.AreEqual(7, partialDate.Months);
            Assert.AreEqual(23, partialDate.Days);
            Assert.IsNull(partialDate.Offset);

            partialDate = PartialDate.FromDateTimeOffset(dateTimeOffset, includeOffset: true);
            Assert.AreEqual(2019, partialDate.Years);
            Assert.AreEqual(7, partialDate.Months);
            Assert.AreEqual(23, partialDate.Days);
            Assert.AreEqual(plusOne, partialDate.Offset);

            partialDate = PartialDate.FromDateTimeOffset(dateTimeOffset, prec: PartialPrecision.Year, includeOffset: true);
            Assert.AreEqual(2019, partialDate.Years);
            Assert.IsNull(partialDate.Months);
            Assert.AreEqual(PartialPrecision.Year, partialDate.Precision);
            Assert.AreEqual(plusOne, partialDate.Offset);
        }