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.