Timestamp Difference

De DigiWiki.

A quicky to find the amount of time in seconds between two timestamps. Makes use of a simplified Julian Date formula from Weisstein's World of Science (website listed in the code) that works for years between 1901 and 2099. I include an example function illustrating converting a timestamp to unixtime.

// Find the difference between two timestamps in seconds
// Works for years between 1901 and 2099
// Ben Fassbinder  Oct 17, 2006
 
integer timestamp_diff(string ts1, string ts2)
{
    list ts = llParseString2List( ts1, ["-","T",":","Z"] , [] );
 
    integer y = (integer)llList2String(ts, 0);
    integer l = (integer)llList2String(ts, 1);
    integer d = (integer)llList2String(ts, 2);
    integer h = (integer)llList2String(ts, 3);
    integer m = (integer)llList2String(ts, 4);
    integer s1 = llRound((float)llList2String(ts, 5));
 
    s1 += 60*m + 3600*h;
 
    integer jd1 = julian_date(y, l, d);
 
    ts = llParseString2List( ts2, ["-","T",":","Z"] , [] );
 
    y = (integer)llList2String(ts, 0);
    l = (integer)llList2String(ts, 1);
    d = (integer)llList2String(ts, 2);
    h = (integer)llList2String(ts, 3);
    m = (integer)llList2String(ts, 4);
    integer s2 = llRound((float)llList2String(ts, 5));
 
    s2 += 60*m + 3600*h;
 
    integer jd2 = julian_date(y, l, d);
 
    return 86400*(jd2 - jd1) + s2 - s1;
}
 
 
// Julian date minus a constant (1721013.5)
// since we are only doing differences, the constant is unnecessary.
// valid for dates between 1901 and 2099
//
// source:  http://scienceworld.wolfram.com/astronomy/JulianDate.html
 
integer julian_date(integer y, integer m, integer d)
{
    integer result = 367 * y - llFloor(7.0 *
                                        (y + llFloor( (m+9.0)/12.0 ) )/4.0
                                    );
 
    result += llFloor(275.0*m/9.0) + d;
 
    return result;
}
 
 
// timestamp to unix time.
// unix time = 0 corresponds to midnight GMT Jan 1, 1970
 
integer timestamp_to_unixtime(string ts)
{
    return timestamp_diff("1970-01-01T00:00:00Z", ts);
}
 
 
default
{
    touch_start(integer total_number)
    {
        integer ut = llGetUnixTime();
        integer ts = timestamp_to_unixtime(llGetTimestamp());
 
        llSay(0, (string)ts + " vs. " + (string)ut);
    }
}
Outils personnels
  • Cette page a été consultée 439 fois.
donate
Google Ads