Don't click here unless you want to be banned.

LSL Wiki : ExampleUnix2DateTime

HomePage :: PageIndex :: RecentChanges :: RecentlyCommented :: UserSettings :: You are crawl338.us.archive.org
Function to generate the date and time values from a Unix timestamp.

// Unix2DateTime.lsl
// Convert the Unix time (seconds since 1-1-1970 00:00:00) into a list : [ year, month, day, hour, minute, second].

// HISTORY:
// Version: 1.2
// Added TimeString(list unix2datetime_list) and DateString(list unix2datetimelist) functions.
// Version: 1.1
// Fixed incorrect date when adding 1 day at last day of month.

integer DAYS_PER_YEAR    = 365;            // Non leap year
integer SECONDS_PER_DAY  = 86400;
integer SECONDS_PER_HOUR = 3600;

integer LeapYear(integer year)
{
    if (year % 4 == 0)
    {
        if (year % 100 == 0)
        {
            if (year % 400 == 0)
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
        else
        {
            return 1;
        }
    }
    else
    {
        return 0;
    }
}
                
integer DaysPerMonth(integer year,integer month)
{
    if (month < 8)
    {
        if (month % 2 == 0)
        {
            if (month == 2)
            {
                if (LeapYear(year))
                {
                    return 29;
                }
                else
                {
                    return 28;
                }
            }
            else
            {
                return 30;
            }
        }
        else
        {
            return 31;
        }
    }
    else
    {
        if (month % 2 == 0)
        {
            return 31;
        }
        else
        {
            return 30;
        }
    }
}

integer DaysPerYear(integer year)
{
    if (LeapYear(year))
        return DAYS_PER_YEAR + 1;
    else
        return DAYS_PER_YEAR;
}

list Unix2DateTime(integer unixtime)
{
    integer days_since_1_1_1970     = unixtime / SECONDS_PER_DAY;
    integer day = days_since_1_1970 + 1;    // Add 1 day since days are 1 based, not 0!
    integer year  = 1970;
    integer days_per_year = DaysPerYear(year);

       // Calculate year, month and day
    
    while (day > days_per_year)
    {
        day -= days_per_year;
        ++year;
        days_per_year = DaysPerYear(year);
    }

    integer month = 1;
    integer days_per_month = DaysPerMonth(year,month);
    
    while (day > days_per_month)
    {
        day -= days_per_month;
        
        if (++month > 12)
        {    
            ++year;
            month = 1;
        }
        
        days_per_month = DaysPerMonth(year,month);
    }

        // Calculate the hours, minutes and seconds
    
    integer seconds_since_midnight  = unixtime % SECONDS_PER_DAY;
    integer hour        = seconds_since_midnight / SECONDS_PER_HOUR;
    integer second     = seconds_since_midnight % SECONDS_PER_HOUR;
    integer minute    = second / SECOND_PER_MINUTE;
    second          = second % SECONDS_PER_MINUTE;
    
    return [ year, month, day, hour, minute, second ];
}

///////////////////////////////// MonthName() ////////////////////////////

list MonthNameList = [     "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
                        "JUL", "AUG", "SEP", "OCT" , "NOV", "DEC" ];

string MonthName(integer month)
{
    if (month >= 0 && month < 12)
        return llList2String(MonthNameList, month);
    else
        return "";
}

///////////////////////////////// DateString() ///////////////////////////

string DateString(list timelist)
{
    integer year       = llList2Integer(timelist,0);
    integer month      = llList2Integer(timelist,1);
    integer day        = llList2Integer(timelist,2);
   
    return (string)day + "-" + MonthName(month - 1) + "-" + (string)year;
}

///////////////////////////////// TimeString() ////////////////////////////

string TimeString(list timelist)
{
    integer hour          = llList2Integer(timelist,3);
    integer minute         = llList2Integer(timelist,4);
    integer second         = llList2Integer(timelist,5);
    string  hourstr     = (string)hour;
    string  minutestr   = (string)minute;
    string  secondstr   = (string)second;
   
    if (hour < 10)         hourstr     = "0" + hourstr;
    if (minute < 10)     minutestr     = "0" + minutestr;
    if (second < 10)    secondstr    = "0" + secondstr;
    return hourstr + ":" + minutestr + ":" + secondstr;
}


Examples
There is no comment on this page. [Display comments/form]