When creating backups or log files, I like to name the files with a timestamp, ie. the date plus the time.

I use the date command to produce timestamps in the appropriate format, but I find the format specifier a bit long-winded and difficult to remember – is %m minutes or month?

There is a better way… date -I

To make the strings sort in a sane manner, I find it best to use a format with the timestamp elements in descending order of size, eg. YYYYMMDDhhmmss which is produced with a format specifier like this:

# date +%Y%m%d%H%M%S
20100202130818

But as I've mentioned, I find that to be a pain to remember. Wouldn't it be great if there was a single switch that produced a suitable timestamp format?

Well, it turns out that there is:  --iso-8601 or -I, with the seconds modifier:

# date -Iseconds
2010-02-02T13:07:40+0000

According to NEWS in the coreutils distribution:

  date accepts the new option --rfc-3339=TIMESPEC.  The old --iso-8602 (-I)
  option is deprecated; it still works, but new applications should avoid it.
  date, du, ls, and pr's time formats now support new %:z, %::z, %:::z
  specifiers for numeric time zone offsets like -07:00, -07:00:00, and -07.

The –rfc-3339 option is similar, but it includes a space in the output, which I prefer to avoid:

# date --rfc-3339 seconds
2010-02-02 13:16:10+00:00

So, I'll be continuing to use -Iseconds

Leave a reply

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

required