Ah, okay, thanks for the info.

On Wed, Aug 02, 2017 at 06:48:39PM -0600, Bob Proulx wrote:
> Dale Harris wrote:
> > Package: coreutils
> > Version: 8.26-3
> > Severity: normal
> > Tags: upstream
> > 
> > Dear Maintainer,
> > 
> > 
> > Just trying to figure out what the first, second, third days are of a month.
> > 
> > So for August 2017:
> > 
> > 
> >     August 2017
> > Su Mo Tu We Th Fr Sa
> >        1 _2  3      4  5
> >  6  7  8  9 10 11 12
> > 13 14 15 16 17 18 19
> > 20 21 22 23 24 25 26
> > 27 28 29 30 31
> > 
> > 
> > This is relative to:  Wed Aug  2 17:33:10 EDT 2017
> > 
> > If do:
> > 
> > date -d 'first monday', I get: Mon Aug  7 00:00:00 EDT 2017
> 
> The docs say:
> 
>     The explicit mention of a day of the week will forward the date (only if
>     necessary) to reach that day of the week in the future.
> 
>        Days of the week may be spelled out in full: ‘Sunday’, ‘Monday’,
>     ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’ or ‘Saturday’.  Days may be
>     abbreviated to their first three letters, optionally followed by a
>     period.  The special abbreviations ‘Tues’ for ‘Tuesday’, ‘Wednes’ for
>     ‘Wednesday’ and ‘Thur’ or ‘Thurs’ for ‘Thursday’ are also allowed.
> 
>        A number may precede a day of the week item to move forward
>     supplementary weeks.  It is best used in expression like ‘third monday’.
>     In this context, ‘last DAY’ or ‘next DAY’ is also acceptable; they move
>     one week before or after the day that DAY by itself would represent.
> 
> Therefore mentioning "1 Monday" (which is what "first monday" is
> mapped to) will forward to one Monday in the future.  Okay.
> 
> > date -d 'second monday', I get: Mon Aug  7 00:00:01 EDT 2017
> 
> The word "second" is problematic.  The documentation says:
> 
>        A few ordinal numbers may be written out in words in some contexts.
>     This is most useful for specifying day of the week items or relative
>     items (see below).  Among the most commonly used ordinal numbers, the
>     word ‘last’ stands for -1, ‘this’ stands for 0, and ‘first’ and ‘next’
>     both stand for 1.  Because the word ‘second’ stands for the unit of time
>     there is no way to write the ordinal number 2, but for convenience
>     ‘third’ stands for 3, ‘fourth’ for 4, ‘fifth’ for 5, ‘sixth’ for 6,
>     ‘seventh’ for 7, ‘eighth’ for 8, ‘ninth’ for 9, ‘tenth’ for 10,
>     ‘eleventh’ for 11 and ‘twelfth’ for 12.
> 
> The important part is:
> 
>     Because the word ‘second’ stands for the unit of time
>     there is no way to write the ordinal number 2
> 
> That is why you can't say "second monday".  You can only use the
> numbers and say "2 Monday".  (Don't shoot me.  I am only the
> messenger.)
> 
> > date -d 'third monday', I get: Mon Aug 21 00:00:00 EDT 2017
> > date -d 'fourth monday', I get: Mon Aug 28 00:00:00 EDT 2017
> > date -d 'fifth monday', I get: Mon Sep  4 00:00:00 EDT 2017
> 
> All okay.
> 
> I want to note that the default date format for legacy reasons is
> ambiguous.  It is better to use an unambiguous format such as date -R
> which will specify the timezone in a standard format.
> 
> > So I'm a bit confused, if it's relative from the day, I could unstand the 
> > first Monday being the 7th, but the second Monday should be the 14th. If it
> > is inside the month, then this doesn't make any sense because the 7th is the
> > first Monday of the month, and 14th the second. What am I missing?
> 
> If doing date calculations it is highly recommended to do them around
> 12:00 noon instead of midnight to avoid daylight saving time changes.
> Let me specify a timezone explicitly here for the archive and
> reproducibility of the case.
> 
>     env TZ=US/Mountain date -R -d '1 monday 12:00'
>     Mon, 07 Aug 2017 12:00:00 -0600
> 
>     env TZ=US/Mountain date -R -d '2 monday 12:00'
>     Mon, 14 Aug 2017 12:00:00 -0600
> 
>     env TZ=US/Mountain date -R -d '3 monday 12:00'
>     Mon, 21 Aug 2017 12:00:00 -0600
> 
>     env TZ=US/Mountain date -R -d '4 monday 12:00'
>     Mon, 28 Aug 2017 12:00:00 -0600
> 
> Or with with UTC instead.  Working with UTC is always recommended.
> 
>     date -u -R -d '1 monday'
>     Mon, 07 Aug 2017 00:00:00 +0000
> 
>     date -u -R -d '2 monday'
>     Mon, 14 Aug 2017 00:00:00 +0000
> 
>     date -u -R -d '3 monday'
>     Mon, 21 Aug 2017 00:00:00 +0000
> 
>     date -u -R -d '4 monday'
>     Mon, 28 Aug 2017 00:00:00 +0000
> 
> A reference to some of these problem areas.
> 
>   
> https://www.gnu.org/software/coreutils/faq/coreutils-faq.html#The-date-command-is-not-working-right_002e
> 
> Hopefully this explains the problem.
> Bob

-- 
Dale Harris / Unix System Admin / Generic Network Systems, LLC
d...@gnetsys.net       +1-212-268-4722 ext. 230
http://www.gnetsys.com/

Reply via email to