GetTimestampOffset

From Second Life Wiki
Revision as of 06:00, 13 May 2008 by Siann Beck (talk | contribs) (Created page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This function returns llGetTimestamp() with an hour offset. It will wrap day, month and year as required. Offsets of more than 24 hours either way are not supported.

<lsl> string sbGetTimeStamp(integer intOffset) {

   // Start with December for purposes of wrapping
   list    lstDays  = [31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
   string  strTimestamp = llGetTimestamp();
   list    lstTime  = llParseString2List(strTimestamp, ["-", ":", ".", "T"], []);
   integer intYear  = llList2Integer(lstTime, 0);
   integer intMonth = llList2Integer(lstTime, 1);
   integer intDay   = llList2Integer(lstTime, 2);
   integer intHour  = llList2Integer(lstTime, 3) + intOffset;
   string  strYear;
   string  strMonth;
   string  strDay;
   string  strHour;
   if (intOffset == 0) { return strTimestamp; }
   // Add a day to February in leap years
   if (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0)) {
       lstDays = llListReplaceList(lstDays, [29], 2, 2);
   }
   if (intOffset < 0) {
       if (intHour < 0) { 
           intHour+= 24;
           --intDay;
       }
       if (intDay < 1) {
           intDay = llList2Integer(lstDays, --intMonth);
       }
       if (intMonth < 1) {
           intMonth = 12;
           --intYear;
       }
   }
   if (intOffset > 0) {
       if (intHour > 23) {
           intHour-= 24;
           ++intDay;
       }
       if (intDay > llList2Integer(lstDays, intMonth)) {
           intDay = 1;
           ++intMonth;
       }
       if (intMonth > 12) {
           intMonth = 1;
           ++intYear;
       }
   }
   strYear  = (string)intYear;
   strMonth = (string)intMonth;
   strDay   = (string)intDay;
   strHour  = (string)intHour;
   if (llStringLength(strMonth) < 2) { strMonth = "0" + strMonth; }
   if (llStringLength(strDay)   < 2) { strDay   = "0" + strDay;   }
   if (llStringLength(strHour)  < 2) { strHour  = "0" + strHour;  }
   return
       strYear                   + "-" + 
       strMonth                  + "-" + 
       strDay                    + "T" + 
       strHour                   + ":" + 
       llList2String(lstTime, 4) + ":" + 
       llList2String(lstTime, 5) + "." + 
       llList2String(lstTime, 6) + "Z";

} </lsl>

For technical support, requests, etc., use the Search under the Groups Tab and search for .::Prototype::.

if you have any problems getting this script to work either contact me inworld Revolution Perenti or visit out Open Source Section at skidz partz we have many different versions of this system. Snow Crash