introduce "epoch" as a new base time reference, meaning timestamp 0.
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Thu, 11 Nov 2010 16:12:17 +0000 (16:12 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Thu, 11 Nov 2010 16:12:17 +0000 (16:12 +0000)
This disambiguates between some "at-style" time specs:

11111111 yields an error message:

did you really mean month 1111111?

and

19711205 denotes Dec 12, 1971 and not the timestamp.

The patch allows to write:

epoch+11111111s or epoch+19711205s

-- Peter Stamfest

git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@2147 a5681a0c-68f1-0310-ab6d-d61299d08faa

doc/rrdfetch.pod
src/rrd.h
src/rrd_parsetime.c

index 49b8fc2..29f91bc 100644 (file)
@@ -165,11 +165,16 @@ single-number date is interpreted as MMDD[YY]YY.
 I<NOTE2>: if you specify the I<day> in this way, the I<time-of-day> is
 REQUIRED as well.
 
-Finally, you can use the words B<now>, B<start>, or B<end> as your time
+Finally, you can use the words B<now>, B<start>, B<end> or B<epoch> as your time
 reference. B<Now> refers to the current moment (and is also the default
 time reference). B<Start> (B<end>) can be used to specify a time
 relative to the start (end) time for those tools that use these
-categories (B<rrdfetch>, L<rrdgraph>).
+categories (B<rrdfetch>, L<rrdgraph>) and B<epoch> indicates the 
+*IX epoch (*IX timestamp 0 = 1970-01-01 00:00:00 UTC). B<epoch> is
+useful to disambiguate between a timestamp value and some forms
+of abbreviated date/time specifications, because it allows to use 
+time offset specifications using units, eg. B<epoch>+19711205s unambiguously
+denotes timestamp 19711205 and not 1971-12-05 00:00:00 UTC.
 
 Month and day of the week names can be used in their naturally
 abbreviated form (e.g., Dec for December, Sun for Sunday, etc.). The
index 7e63110..53838c0 100644 (file)
--- a/src/rrd.h
+++ b/src/rrd.h
@@ -284,7 +284,8 @@ extern    "C" {
     typedef enum {
         ABSOLUTE_TIME,
         RELATIVE_TO_START_TIME,
-        RELATIVE_TO_END_TIME
+        RELATIVE_TO_END_TIME,
+        RELATIVE_TO_EPOCH
     } rrd_timetype_t;
 
 #define TIME_OK NULL
index f3a8e2e..1b59f45 100644 (file)
 
 enum {                  /* symbols */
     MIDNIGHT, NOON, TEATIME,
-    PM, AM, YESTERDAY, TODAY, TOMORROW, NOW, START, END,
+    PM, AM, YESTERDAY, TODAY, TOMORROW, NOW, START, END, EPOCH,
     SECONDS, MINUTES, HOURS, DAYS, WEEKS, MONTHS, YEARS,
     MONTHS_MINUTES,
     NUMBER, PLUS, MINUS, DOT, COLON, SLASH, ID, JUNK,
@@ -157,6 +157,7 @@ static const struct SpecialToken VariousWords[] = {
     {"s", START},
     {"end", END},
     {"e", END},
+    {"epoch", EPOCH},
 
     {"jan", JAN},
     {"feb", FEB},
@@ -859,6 +860,9 @@ char     *rrd_parsetime(
     case MINUS:
         break;          /* jump to OFFSET-SPEC part */
 
+    case EPOCH:
+        ptv->type = RELATIVE_TO_EPOCH;
+        goto KeepItRelative;
     case START:
         ptv->type = RELATIVE_TO_START_TIME;
         goto KeepItRelative;