xenial (1) dateutils.ddiff.1.gz

Provided by: dateutils_0.3.1-1.1_amd64 bug

NAME

       ddiff - Compute duration from DATE/TIME (the reference date/time) to the other

SYNOPSIS

       ddiff [OPTION]... DATE/TIME [DATE/TIME]...

DESCRIPTION

       Compute  duration  from  DATE/TIME  (the reference date/time) to the other DATE/TIMEs given and print the
       result as duration.  If the other DATE/TIMEs are omitted read them from stdin.

       DATE/TIME can also be one of the following specials
         - `now'           interpreted as the current (UTC) time stamp
         - `time'          the time part of the current (UTC) time stamp
         - `today'         the current date (according to UTC)
         - `tomo[rrow]'    tomorrow's date (according to UTC)
         - `y[ester]day'   yesterday's date (according to UTC)

       Note: The output format of durations (specified via -f) takes all format specifiers  into  account,  i.e.
       specifying  %M  and %S for example prints the duration in minutes and seconds, whereas specifying %S only
       prints the duration in seconds.

       See section `The refinement rule' in ddiff(1).

       Recognized OPTIONs:

       -h, --help
              Print help and exit

       -V, --version
              Print version and exit

       -q, --quiet
              Suppress message about date/time and duration parser errors and fix-ups.  The default is to  print
              a warning or the fixed up value and return error code 2.

       -f, --format=STRING
              Output format.  This can either be a specifier string (similar to strftime()'s FMT) or the name of
              a calendar.

       -i, --input-format=STRING...
              Input format, can be used multiple times.  Each date/time will  be  passed  to  the  input  format
              parsers  in  the  order they are given, if a date/time can be read successfully with a given input
              format specifier string, that value will be used.

       -e, --backslash-escapes
              Enable interpretation of backslash escapes in the output and input format specifier strings.

       --from-zone=ZONE
              Interpret dates on stdin or the command line as coming from the time zone ZONE.

FORMAT SPECS FOR DURATIONS

       Unlike time or absolute instants, durations are reference-free, i.e. the reference instant is not part of
       the  duration.  As a result durations cannot be named, i.e. there is no naming scheme that applies to all
       durations and all references unambiguously.

       Consequently, none of the format specifiers for date/times makes  sense  for  durations  in  the  literal
       sense.   However,  to aid intuitive usage we reused format specifiers when they represent integral values
       and a valid unit for duration, as follows:

       Date specs:
         %c  Equivalent to %w
         %d  Durations in days
         %F  Equivalent to %dd with no resorting to bigger units
         %m  Durations in months
         %w  Durations in weeks
         %y  Equivalent to %Y
         %Y  Durations in years

         %db Duration in business days
         %dB Equivalent to %db

       Time specs:
         %H  Durations in hours
         %I  Equivalent to %H
         %M  Durations in minutes
         %S  Durations in seconds
         %T  Equivalent to %Ss without resorting to bigger units

         %rS Durations in real-life seconds, as in including leap seconds
         %rT Equivalent to %rSs without resoring to bigger units

       General specs:
         %n  A newline character
         %t  A tab character
         %%  A literal % character

       Modifiers:
         %r    Modifier to turn units into real units
         %0    Modifier to pad refined values with zeroes
         %SPC  Modifier to pad refined values with spaces
         b     Suffix, treat days as business days

THE REFINEMENT RULE

       Durations are somewhat ambiguous when it comes to representing them through  format  specifiers.   Unlike
       format   specifiers   in  point-in-time  representations  duration  specifiers  can  have  an  intra-line
       relationship.

       So for instance a duration of 128 seconds might be presented through "%S" as "128" but similarly  through
       "%M:%S" as "02:08" (read two minutes and 8 seconds).

       There  are several approaches to deal with this ambiguity.  The ddiff tool will follow, what we call, the
       refinement rule.  That is, regardless  of  the  position  of  a  format  specifier,  if  it  is  a  valid
       @emph{refinement} of another specifier in the format string, then it will only show the fractional value,
       i.e. the value in its natural range with respect to the @emph{refined} specifier.

         %Y  possible refinements: %m, %w, %d
         %m  possible refinements: %w, %d
         %w  possible refinements: %d
         %d  possible refinements: %H, %M, %S
         %H  possible refinements: %M, %S
         %M  possible refinements: %S

       The refinement alternatives are listed in order of precedence and they are mutually exclusive.   I.e.  it
       is  not  possible  to express a duration in months and hours without having a "%d" specifier as well.  On
       the other hand in a chain of refinements inner elements are optional, i.e. you can express a duration  in
       weeks and hours because every day has 24 hours and hence there are 168 hours in a week.

       In  case  of negative durations (the minuend is in the future relative to the subtrahend) @emph{only} the
       largest unit will carry the minus sign.

       Using the refinement rule keeps the format string dead simple, there's no need for operators or  a  full-
       blown language to distinguish the range ambiguity, which then would have to be escaped because they could
       also in theory be part of the literal characters of the format string, resulting more often than  not  in
       command  lines  that  are  hard  to  craft  and even harder to understand later on (e.g. if used in shell
       scripts).

       The refinement rule ingeniously covers the 99% case but, unlike other approaches, there's  @emph{no}  way
       to display two unrefined values in the same format string, e.g. "'%w weeks (which is %d days)'".

EXAMPLES

         $ ddiff 2012-03-02 2012-03-02
         0
         $

         $ ddiff 2012-03-02 2012-03-12
         10
         $

         $ ddiff 2012-03-02 2012-04-12
         41
         $

         $ ddiff 2012-03-12 2012-04-02
         21
         $

         $ ddiff 2012-04-02 2012-03-12
         -21
         $

         $ ddiff 2012-01-02 2012-02-29 -f '%dd'
         58d
         $

         $ ddiff 2012-01-02 2012-02-29 -f '%ww %dd'
         8w 2d
         $

         $ ddiff 10:00:00 10:00:00
         0s
         $

         $ ddiff 10:01:00 10:06:00
         300s
         $

         $ ddiff 10:06:00 10:01:00
         -300s
         $

         $ ddiff 10:01:00 11:03:10 -f '%S sec'
         3730 sec
         $

         $ ddiff 10:01:00 11:03:10 -f '%Mm %Ss'
         62m 10s
         $

         $ ddiff 10:01:00 11:03:10 -f '%H:%M:%S'
         1:2:10
         $

         $ ddiff 2012-03-02T10:04:00 2012-03-02T10:14:00
         600s
         $

         $ ddiff 2012-03-02T10:04:00 2012-03-02T10:14:00 -f '%M min'
         10 min
         $

         $ ddiff 2012-03-01T12:17:00 2012-03-02T14:00:00
         92580s
         $

         $ ddiff 2012-03-01T12:17:00 2012-03-02T14:00:00 -f '%d days and %S seconds'
         1 days and 6180 seconds
         $

AUTHOR

       Written by Sebastian Freundt <freundt@fresse.org>

REPORTING BUGS

       Report bugs to: https://github.com/hroptatyr/dateutils/issues

SEE ALSO

       The  full  documentation for ddiff is maintained as a Texinfo manual.  If the info and ddiff programs are
       properly installed at your site, the command

              info (dateutils)ddiff

       should give you access to the complete manual.