public static string ToXrmString(DateTime date) { // Get a date string from the Date object //2011-04-20T14:00:00Z // NOTE: we assume that the local date is in fact converted to UTC already // This avoids any local browser timezone missmatches with the user settings timezone string month = DateTimeEx.PadNumber(date.GetMonth() + 1, 2); string day = DateTimeEx.PadNumber(date.GetDate(), 2); string hours = DateTimeEx.PadNumber(date.GetHours(), 2); string mins = DateTimeEx.PadNumber(date.GetMinutes(), 2); string secs = DateTimeEx.PadNumber(date.GetSeconds(), 2); return(String.Format("{0}-{1}-{2}T{3}:{4}:{5}Z", date.GetFullYear(), month, day, hours, mins, secs)); }
private static DateTime GetCutoverTime(DateTime CurrentTime, int?Year, int?Month, int?Day, int?Hour, int?Minute, int?Second, int?Milliseconds, int?Weekday ) { if (Year != 0) { return(null); } DateTime WorkingTime; DateTime ScratchTime; int? BestWeekdayDate; int? WorkingWeekdayNumber; int? TargetWeekdayNumber; int? TargetYear; int? TargetMonth; int? TargetWeekday; // range [0..6] == [Sunday..Saturday] // The time is an day in the month style time // the convention is the Day is 1-5 specifying 1st, 2nd... Last // day within the month. The day is WeekDay. // Compute the target month and year TargetWeekdayNumber = Day; if ((TargetWeekdayNumber > 5) || (TargetWeekdayNumber == 0)) { return(null); } TargetWeekday = Weekday; TargetMonth = Month; TargetYear = CurrentTime.GetFullYear(); BestWeekdayDate = 0; WorkingTime = DateTimeEx.FirstDayOfMonth(CurrentTime, (int)TargetMonth); WorkingTime = DateTimeEx.DateAdd(DateInterval.Hours, (int)Hour, WorkingTime); WorkingTime = DateTimeEx.DateAdd(DateInterval.Minutes, (int)Minute, WorkingTime); WorkingTime = DateTimeEx.DateAdd(DateInterval.Seconds, (int)Second, WorkingTime); WorkingTime = DateTimeEx.DateAdd(DateInterval.Milliseconds, (int)Milliseconds, WorkingTime); ScratchTime = WorkingTime; // Compute bias to target weekday if (ScratchTime.GetDay() > TargetWeekday) { WorkingTime = DateTimeEx.DateAdd(DateInterval.Days, (int)(7 - (ScratchTime.GetDay() - TargetWeekday)), WorkingTime); } else if (ScratchTime.GetDay() < TargetWeekday) { WorkingTime = DateTimeEx.DateAdd(DateInterval.Days, (int)(TargetWeekday - ScratchTime.GetDay()), WorkingTime); } // We are now at the first weekday that matches our target weekday BestWeekdayDate = WorkingTime.GetDay(); WorkingWeekdayNumber = 1; // Keep going one week at a time until we either pass the // target weekday, or we match exactly ScratchTime = WorkingTime; while (WorkingWeekdayNumber < TargetWeekdayNumber) { WorkingTime = DateTimeEx.DateAdd(DateInterval.Days, 7, WorkingTime); if (WorkingTime.GetMonth() != ScratchTime.GetMonth()) { break; } ScratchTime = WorkingTime; WorkingWeekdayNumber = WorkingWeekdayNumber + 1; } return(ScratchTime); }