Unix2DateTime
///////////////////////////////////////////////////////////////////// // Script Library Contribution by Flennan Roffo // Logic Scripted Products & Script Services // Peacock Park (183,226,69) // (c) 2007 - Flennan Roffo // // Distributed as GPL // // SCRIPT: Unix2DateTime.lsl // // FUNCTION: // Perform conversion from return value of llGetUnixTimestamp() to // date and time strings. /////////////////////////////////////////////////////////////////////
///////////////////////////// Unix Time conversion //////////////////
integer DAYS_PER_YEAR = 365; // Non leap year integer SECONDS_PER_YEAR = 31536000; // Non leap year integer SECONDS_PER_DAY = 86400; integer SECONDS_PER_HOUR = 3600; integer SECONDS_PER_MINUTE = 60;
list MonthNameList = [ "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
"JUL", "AUG", "SEP", "OCT", "NOV", "DEC" ];
////////////////////////////// LeapYear() /////////////////////////////
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;
}
}
////////////////////////////// DaysPerMonth() ///////////////////////////////////////
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;
}
}
}
/////////////////////////// DaysPerYear() ////////////////////////////////////
integer DaysPerYear(integer year) {
if (LeapYear(year))
return DAYS_PER_YEAR + 1;
else
return DAYS_PER_YEAR;
}
/////////////////////////////////////////////////////////////////////////////////////// // Convert Unix time (integer) to a Date and Time string ///////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// Unix2DataTime() ///////////////////////////////////////
list Unix2DateTime(integer unixtime) {
integer days_since_1_1_1970 = unixtime / SECONDS_PER_DAY;
integer day = days_since_1_1_1970 + 1;
integer year = 1970;
integer days_per_year = DaysPerYear(year);
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);
}
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 / SECONDS_PER_MINUTE; second = second % SECONDS_PER_MINUTE; return [ year, month, day, hour, minute, second ];
}
///////////////////////////////// MonthName() ////////////////////////////
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;
}
/////////////////////////////////////////////////////////////////////////////// // Convert a date and time to a Unix time integer ///////////////////////////////////////////////////////////////////////////////
////////////////////////// DateTime2Unix() ////////////////////////////////////
integer DateTime2Unix(integer year, integer month, integer day, integer hour, integer minute, integer second) { integer time = 0; integer yr = 1970; integer mt = 1; integer days;
while(yr < year) { days = DaysPerYear(yr++); time += days * SECONDS_PER_DAY; }
while (mt < month) { days = DaysPerMonth(mt++); time += days * SECONDS_PER_DAY; }
days = day - 1; time += days * SECONDS_PER_DAY; time += hour * SECONDS_PER_HOUR; time += minute * SECONDS_PER_MINUTE; time += second;
return time; } ////////////////////////////////////////////// // End Unix2DateTime //////////////////////////////////////////////