Difference between revisions of "Talk:Unix2DateTime"

From Second Life Wiki
Jump to: navigation, search
(Suggestions)
Line 10: Line 10:
 
Unix time is usable from 1970 to 2037 ... so why does this script's leap year test include handling for centuries that are not multiples of 400 years?
 
Unix time is usable from 1970 to 2037 ... so why does this script's leap year test include handling for centuries that are not multiples of 400 years?
 
A touch of overkill? [[User:Omei Qunhua|Omei Qunhua]] 16:09, 11 January 2013 (PST)
 
A touch of overkill? [[User:Omei Qunhua|Omei Qunhua]] 16:09, 11 January 2013 (PST)
 +
 +
== Compacting ==
 +
 +
Any objections if I replace 3 user functions with the following compact versions?
 +
 +
<lsl>
 +
// This leap year test works for all years from 1901 to 2099 (yes, including 2000)
 +
// Which is more than enough for UnixTime computations, and 99% of SL applications
 +
integer LeapYear( integer year)
 +
{
 +
    return !(year & 3);
 +
}
 +
 +
integer DaysPerMonth(integer year, integer month)
 +
{
 +
    if (month == 2)  return 28 + LeapYear(year);
 +
    return 30 + ( (month + (month > 7) ) & 1);          // Odd months up to July, and even months after July, have 31 days
 +
}
 +
 +
integer DaysPerYear(integer year)
 +
{
 +
    return 365 + LeapYear(year);
 +
}
 +
</lsl>
 +
 +
[[User:Omei Qunhua|Omei Qunhua]] 03:49, 9 December 2013 (PST)

Revision as of 04:49, 9 December 2013

Script didn't compile due to this line:
days = DaysPerMonth(mt++);

Changed that line to:
days = DaysPerMonth(year,mt++);
--Huney Jewell 07:20, 20 September 2007 (PDT)

Leap Years

Unix time is usable from 1970 to 2037 ... so why does this script's leap year test include handling for centuries that are not multiples of 400 years? A touch of overkill? Omei Qunhua 16:09, 11 January 2013 (PST)

Compacting

Any objections if I replace 3 user functions with the following compact versions?

<lsl> // This leap year test works for all years from 1901 to 2099 (yes, including 2000) // Which is more than enough for UnixTime computations, and 99% of SL applications integer LeapYear( integer year) {

   return !(year & 3);

}

integer DaysPerMonth(integer year, integer month) {

   if (month == 2)  	return 28 + LeapYear(year);
   return 30 + ( (month + (month > 7) ) & 1);           // Odd months up to July, and even months after July, have 31 days

}

integer DaysPerYear(integer year) {

   return 365 + LeapYear(year);

} </lsl>

Omei Qunhua 03:49, 9 December 2013 (PST)