public DvDateTime Subtract(DvDuration duration) { Iso8601Duration isoDuration = new Iso8601Duration(duration.Value); Iso8601DateTime newDateTime = this.isoDateTime.Subtract(isoDuration); return(new DvDateTime(newDateTime.ToString())); }
private bool IsMatchPattern(Iso8601DateTime aValue) { DesignByContract.Check.Require(aValue != null, string.Format(CommonStrings.XMustNotBeNull, "aValue")); DesignByContract.Check.Require(this.Pattern != null, string.Format(CommonStrings.XMustNotBeNull, "Pattern")); if (!CDateTime.IsMatchValidityKind(this.MonthValidity, aValue.MonthUnknown)) { return(false); } if (!CDateTime.IsMatchValidityKind(this.DayValidity, aValue.DayUnknown)) { return(false); } if (!CDateTime.IsMatchValidityKind(this.HourValidity, aValue.HourUnknown)) { return(false); } if (!CDateTime.IsMatchValidityKind(this.MinuteValidity, aValue.MinuteUnknown)) { return(false); } if (!CDateTime.IsMatchValidityKind(this.SecondValidity, aValue.SecondUnknown)) { return(false); } if (!CDateTime.IsMatchValidityKind(this.MillisecondValidity, !aValue.HasFractionalSecond)) { return(false); } return(true); }
public DvDateTime(string dateTimeString, DvDuration accuracy, string magnitudeStatus, CodePhrase normalStatus, DvInterval <DvDateTime> normalRange, ReferenceRange <DvDateTime>[] otherReferenceRanges) { this.isoDateTime = new Iso8601DateTime(dateTimeString); base.SetBaseData(accuracy, magnitudeStatus, normalStatus, normalRange, otherReferenceRanges); CheckInvariants(); }
protected override void ReadXmlBase(System.Xml.XmlReader reader) { base.ReadXmlBase(reader); // Get value Check.Require(reader.LocalName == "value", "reader.LocalName must be 'value'"); this.isoDateTime = new Iso8601DateTime(reader.ReadElementString("value", RmXmlSerializer.OpenEhrNamespace)); reader.MoveToContent(); }
public DvDateTime(int year, int month, int day, int hour, int minute, int second, double fractionalSecond, int timeZoneSign, int timeZoneHour, int timeZoneMinute) { this.isoDateTime = new Iso8601DateTime(year, month, day, hour, minute, second, fractionalSecond, timeZoneSign, timeZoneHour, timeZoneMinute); CheckInvariants(); }
} // method GetPatternForFormatCharacter /// <summary> /// Returns DvDateTime instance with the given magnitude /// </summary> /// <param name="magnitude">magnitude is the numeric value of the date as seconds /// since the calendar origin point 1/1/0000</param> /// <returns></returns> internal static DvTemporal <DvDateTime> GetDateTimeByMagnitude(double magnitude) { DesignByContract.Check.Require(magnitude >= TimeDefinitions.hoursInDay * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute); double secondsInDay = TimeDefinitions.secondsInMinute * TimeDefinitions.minutesInHour * TimeDefinitions.hoursInDay; //int daysInMagnitude = (int)(Math.Truncate(magnitude / secondsInDay)); double daysInMagnitude = magnitude / secondsInDay; DvDate dvDate = DvDate.GetDateByMagnitude(daysInMagnitude); Iso8601DateTime isoDateTime = new Iso8601DateTime(dvDate.Value); //double remainder = magnitude - daysInMagnitude * secondsInDay; double remainder = magnitude - isoDateTime.GetDateTimeSeconds(); if (remainder != 0 && !isoDateTime.DayUnknown && isoDateTime.Day > TimeDefinitions.nominalDaysInMonth) { remainder += (isoDateTime.Day - TimeDefinitions.nominalDaysInMonth) * TimeDefinitions.hoursInDay * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute; } if (remainder < 0) { dvDate = DvDate.GetDateByMagnitude((isoDateTime.GetDateTimeSeconds() - secondsInDay) / secondsInDay); isoDateTime = new Iso8601DateTime(dvDate.Value); remainder = magnitude - isoDateTime.GetDateTimeSeconds(); } if (remainder == 86400) { dvDate = DvDate.GetDateByMagnitude((isoDateTime.GetDateTimeSeconds() + remainder) / secondsInDay); isoDateTime = new Iso8601DateTime(dvDate.Value); remainder = magnitude - isoDateTime.GetDateTimeSeconds(); } DvTime dvTime = null; if (remainder > 0) { dvTime = DvTime.GetTimeByMagnitude(remainder); return(new DvDateTime(dvDate.Value + "T" + dvTime.Value)); } return(new DvDateTime(dvDate.Value)); }
private DvDate GetDvDate(DvDateTime dateTime) { Iso8601DateTime isoDT = new Iso8601DateTime(dateTime.Value); DvDate date = null; int year = isoDT.Year; int month = 0; if (!isoDT.MonthUnknown) { month = isoDT.Month; } int day = 0; if (!isoDT.DayUnknown) { day = isoDT.Day; } date = new DvDate(year, month, day); return(date); }
private double GetTotalSeconds(DvDateTime dateTime) { Iso8601DateTime isoDT = new Iso8601DateTime(dateTime.Value); double totalTimeSeconds = 0; if (isoDT.HasFractionalSecond) { totalTimeSeconds = isoDT.Hour * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute + isoDT.Minute * TimeDefinitions.secondsInMinute + isoDT.Second + isoDT.FractionalSecond; } else { if (!isoDT.SecondUnknown) { totalTimeSeconds = isoDT.Hour * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute + isoDT.Minute * TimeDefinitions.secondsInMinute + isoDT.Second; } else { if (!isoDT.MinuteUnknown) { totalTimeSeconds = isoDT.Hour * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute + isoDT.Minute * TimeDefinitions.secondsInMinute; } else { if (!isoDT.HourUnknown) { totalTimeSeconds = isoDT.Hour * TimeDefinitions.minutesInHour * TimeDefinitions.secondsInMinute; } } } } return(totalTimeSeconds); }
internal override string ValidValue(object aValue) { DesignByContract.Check.Require(aValue != null, string.Format(CommonStrings.XMustNotBeNull, "aValue")); string dateTimeString = aValue.ToString(); if (!Iso8601DateTime.ValidIso8601DateTime(dateTimeString)) { return(string.Format(AmValidationStrings.InvalidIsoDateTimeX, dateTimeString)); } Iso8601DateTime isoDateTime = new Iso8601DateTime(dateTimeString); if (isoDateTime == null) { throw new ApplicationException(string.Format(CommonStrings.XIsNull, "isoDateTime")); } if (this.Pattern != null) { if (!IsMatchPattern(isoDateTime)) { return(string.Format(AmValidationStrings.DateTimeXDoesNotMatchPatternY, dateTimeString, Pattern)); } } if (this.Range != null) { if (!this.Range.Has(isoDateTime)) { return(string.Format(AmValidationStrings.DateTimeXOutOfRange, dateTimeString)); } } return(string.Empty); }
public DvDateTime(System.DateTime dateTime) { this.isoDateTime = new Iso8601DateTime(dateTime); CheckInvariants(); }
public override DvDuration Diff(DvTemporal <DvDateTime> b) { DesignByContract.Check.Require(b is DvDateTime, "Expected a DvDateTime instance in Diff function."); DvDateTime bObj = b as DvDateTime; if (bObj == this) { return(new DvDuration("PT0S")); } double fractionalSecondsDiff = 0; int secondsDiff = 0; int hoursDiff = 0; int minutesDiff = 0; int daysDiff = 0; int weeksDiff = 0; int monthsDiff = 0; int yearsDiff = 0; Iso8601DateTime leftOperand = new Iso8601DateTime(this.Value); Iso8601DateTime rightOperand = new Iso8601DateTime(bObj.Value); if (leftOperand < rightOperand) { leftOperand = new Iso8601DateTime(bObj.Value);; rightOperand = new Iso8601DateTime(this.Value); } if (leftOperand.HasFractionalSecond && rightOperand.HasFractionalSecond) { fractionalSecondsDiff = leftOperand.FractionalSecond - rightOperand.FractionalSecond; } if (!leftOperand.SecondUnknown && !rightOperand.SecondUnknown) { secondsDiff = leftOperand.Second - rightOperand.Second; } if (!leftOperand.MinuteUnknown && !rightOperand.MinuteUnknown) { minutesDiff = leftOperand.Minute - rightOperand.Minute; } if (!leftOperand.HourUnknown && !rightOperand.HourUnknown) { hoursDiff = leftOperand.Hour - rightOperand.Hour; } if (!leftOperand.DayUnknown && !rightOperand.DayUnknown) { daysDiff = leftOperand.Day - rightOperand.Day; } int daysInMonth = 0; if (!leftOperand.MonthUnknown && !rightOperand.MonthUnknown) { monthsDiff = leftOperand.Month - rightOperand.Month; if (leftOperand.Month > 1) { daysInMonth = System.DateTime.DaysInMonth(leftOperand.Year, leftOperand.Month - 1); } else { daysInMonth = System.DateTime.DaysInMonth(leftOperand.Year - 1, leftOperand.Month - 1 + Iso8601DateTime.monthsInYear); } } yearsDiff = leftOperand.Year - rightOperand.Year; Iso8601Duration diff = Date.NormaliseDuration(yearsDiff, monthsDiff, weeksDiff, daysDiff, hoursDiff, minutesDiff, secondsDiff, fractionalSecondsDiff, daysInMonth); return(new DvDuration(diff.ToString())); }