In this article we will look into the best way to store time-based data and use it with gnuplot.
The first thing to realize is that we should specify a timezone when specifying dates and times (“datetimes”). To prevent calculations, I tend to use datetimes in UTC.
Next on how to store those. Personally I am a great fan of text-based data, because it is human-readable. Expressing dates can be ambiguous. Therefore I prefer to stick to ISO 8601 combined date and time format.
Using e.g. Python, we can accomplish that as follows.
from datetime import datetime now = datetime.utcnow().strftime('%FT%TZ')
This results in e.g. 2018-04-12T20:09:11Z.
To the best of my knowledge, all operating systems provide an API to retrieve the current UTC. Furthermore, strftime is borrowed from the standard C library and POSIX. So it is widely available in programming languages.
The gnuplot program needs some instructions to handle data based on datetimes. Internally, it converts those to seconds. For data spanning multiple days, I tend to use the following.
set xdata time set timefmt "%Y-%m-%dT%H:%M:%SZ" set xtics 86400 set xtics format "%a %d %B" set mxtics 12
The first two lines describe the above mentioned datetime format. The timefmt specification is a subset of that of strftime. The number 86400 represents a 24-hour day expressed in seconds.