Difference between revisions of "GetTimestampOffset"
Jump to navigation
Jump to search
Siann Beck (talk | contribs) m (Removed accidentally-included text from borrowed page) |
Siann Beck (talk | contribs) (Updated with Pacific Time functionality.) |
||
Line 1: | Line 1: | ||
{{LSL Header}} | {{LSL Header}} | ||
This function returns [[llGetTimestamp|llGetTimestamp()]] with an hour offset. It will wrap day, month and year as required. | This function returns [[llGetTimestamp|llGetTimestamp()]] with an hour offset. It will wrap day, month and year as required. If it is passed an offset of more than 24 hours either way, it will use the offset for US Pacific Time (SL time), automatically adjusting for DST. | ||
<lsl> | <lsl> | ||
Line 14: | Line 14: | ||
integer intMonth = llList2Integer(lstTime, 1); | integer intMonth = llList2Integer(lstTime, 1); | ||
integer intDay = llList2Integer(lstTime, 2); | integer intDay = llList2Integer(lstTime, 2); | ||
integer intHour = llList2Integer(lstTime, 3) | integer intHour = llList2Integer(lstTime, 3); | ||
string strYear; | string strYear; | ||
Line 22: | Line 22: | ||
if (intOffset == 0) { return strTimestamp; } | if (intOffset == 0) { return strTimestamp; } | ||
if (intOffset < -24 || intOffset > 24) { | |||
intOffset = ((integer)llGetWallclock() - (integer)llGetGMTclock()) / 3600; | |||
} | |||
// Add a day to February in leap years | // Add a day to February in leap years |
Revision as of 06:35, 13 May 2008
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
This function returns llGetTimestamp() with an hour offset. It will wrap day, month and year as required. If it is passed an offset of more than 24 hours either way, it will use the offset for US Pacific Time (SL time), automatically adjusting for DST.
<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);
string strYear; string strMonth; string strDay; string strHour;
if (intOffset == 0) { return strTimestamp; }
if (intOffset < -24 || intOffset > 24) { intOffset = ((integer)llGetWallclock() - (integer)llGetGMTclock()) / 3600; }
// 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>