User:Zag McMillan/sl time timestamp

From Second Life Wiki
Jump to navigation Jump to search

A quite ugly but working function to return a timestamp based on current time in SL. Works similar as llGetTimestamp(), but returns a string based on current time inworld rather than UTC.


<lsl>

string msGetTimestamp()

   {
       integer slsekunden=(integer)llGetWallclock();
       integer gmtsekunden=(integer)llGetGMTclock();
       integer differenz=gmtsekunden-slsekunden;
       differenz=differenz/3600;
       integer tag=(integer)llGetSubString(llGetTimestamp(),8,9);
       integer monat=(integer)llGetSubString(llGetTimestamp(),5,6);
       integer jahr=(integer)llGetSubString(llGetTimestamp(),0,3);
       integer stunde=(integer)llGetSubString(llGetTimestamp(),11,12);
       integer minute=(integer)llGetSubString(llGetTimestamp(),14,15);
       stunde=stunde-differenz;
       if (stunde<0)
       {
           stunde=24-stunde;
           tag--;
           if (tag==0)
           {
               monat--;
               if (monat==1) tag=31;
               if (monat==2) tag=28;
               if (monat==3) tag=31;
               if (monat==4) tag=30;
               if (monat==5) tag=31;
               if (monat==6) tag=30;
               if (monat==7) tag=31;
               if (monat==8) tag=31;
               if (monat==9) tag=30;
               if (monat==10) tag=31;
               if (monat==11) tag=30;
               if (monat==0) tag=31;
               if(monat==0)
               {
                   monat=12;
                   jahr--;
               }
           }
       }
       string ts=(string)tag;
       string ms=(string)monat;
       string ss=(string)stunde;
       string ns=(string)minute;
       if (llStringLength(ts)<2) ts="0"+ts;
       if (llStringLength(ms)<2) ms="0"+ms;
       if (llStringLength(ss)<2) ss="0"+ss;
       if (llStringLength(ns)<2) ns="0"+ns;
       return((string)jahr+"-"+ms+"-"+ts+"T"+ss+":"+ns+":"+llGetSubString(llGetTimestamp(),17,-1));
   }

default {

   state_entry()
   {
       llSay(0, "Hello, Avatar!");
   }
   touch_start(integer total_number)
   {
       llSay(0,msGetTimestamp());
   }

}


</lsl>