Difference between revisions of "User:Pedro Oval/UnixToDateTime"

From Second Life Wiki
Jump to navigation Jump to search
(Create page)
(No difference)

Revision as of 19:34, 13 May 2014

Convert a Unix timestamp (e.g. as obtained by llGetUnixTime) to a UTC date and time.

Returns a list with the format [year, month, day, hours, minutes, seconds] (UTC).

This is the shortest version, but it works with positive input only (i.e. with numbers representing dates from 1970 to 2037). <lsl> list UnixToDateTime(integer unix) {

   integer c = unix/86400;
   integer a = (c*4 + 102032)/146097 + 15;
   integer b = c + 2442113 + a + a/0xFFFFFFFC; // -4
   c = (b*20+0xFFFFF676)/7305; // -2442
   b += c*0xFFFFFE93 + c/0xFFFFFFFC; // -365, -4
   a = b*1000/30601;
   b += a*0xFFFFFFE2 + a*0xFFFFFDA7/1000; // -30, -601
   return (list)(0xFFFFED94+c+(a>13)) + -~((a+10)%12) + b + unix/3600%24 + unix/60%60 + unix%60; // -4716

} </lsl> Optimized for Mono. Size in Mono: 492 bytes.

Adapted and optimized from this Ruby version: http://ptspts.blogspot.com/2009/11/how-to-convert-unix-timestamp-to-civil.html