internal static System_DateTime MakeDateTime(int hour, int minute, int second, int month, int day, int year)
{
if (year >= 0 && year < 70) year += 2000;
else if (year >= 70 && year <= 110) year += 1900;
// TODO (better)
var dt = new System_DateTime(0);
int i = 0;
try
{
// first add positive values, than negative to not throw exception
// if there will be negative values first.
// This works bad for upper limit, if there are big positive values that
// exceeds DateTime.MaxValue and big negative that will substract it to
// less value, this returns simply MaxValue - it is big enough, so it
// should not occur in real life. Algorithm handling this correctly will
// be much more complicated.
for (i = 1; i <= 2; i++)
{
if (i == 1 && year >= 0)
dt = dt.AddYears(year - 1);
else if (i == 2 && year < 0)
dt = dt.AddYears(year - 1);
if (i == 1 && month >= 0)
dt = dt.AddMonths(month - 1);
else if (i == 2 && month < 0)
dt = dt.AddMonths(month - 1);
if (i == 1 && day >= 0)
dt = dt.AddDays(day - 1);
else if (i == 2 && day < 0)
dt = dt.AddDays(day - 1);
if (i == 1 && hour >= 0)
dt = dt.AddHours(hour);
else if (i == 2 && hour < 0)
dt = dt.AddHours(hour);
if (i == 1 && minute >= 0)
dt = dt.AddMinutes(minute);
else if (i == 2 && minute < 0)
dt = dt.AddMinutes(minute);
if (i == 1 && second >= 0)
dt = dt.AddSeconds(second);
else if (i == 2 && second < 0)
dt = dt.AddSeconds(second);
}
}
catch (ArgumentOutOfRangeException)
{
if (i == 1) // exception while adding positive values
dt = System_DateTime.MaxValue;
else // exception while substracting
dt = System_DateTime.MinValue;
}
return dt;
}