Thank you Kip, so there is no ambiguity in the basic format on regular
basis ordinal due to no support for extra digits.

On Fri, Feb 5, 2021 at 00:49 Kip Cole <[email protected]> wrote:

> Per the standard:
>
> The Gregorian calendar defines a calendar year to be either 365 or 366
> days, which begins on January 1 and ends on December 31. Each Gregorian
> calendar year can be identified by a 4-digit ordinal number beginning with
> ‘0000’ for year zero, through ‘9999’.
>
> 4.3.2 Calendar year and years duration
>
> The calendar year and years duration are represented as follows:
>
> a) Implied: [YYYY]
> EXAMPLE 1 ‘1985’ (calendar year 1985)
>
> b) Explicit: [i][“Y”]
> EXAMPLE 2 ‘12Y’ (twelve years)
>
> The number of digits may exceed 4 in the case of expanded representation,
> in which case the year number may be preceded by a minus sign to indicate a
> year preceding year zero.
>
>
> Only the Expanded (by agreement) year allows more than 4 digits and allows
> a sign (+ or -)
>
>
>
> On 5 Feb 2021, at 7:45 am, José Valim <[email protected]> wrote:
>
> > In fact now that I think about it we are probably violating the spec
> today: we support negative signs to indicate BC for 4-digit years. By my
> reading of the spec we should be requiring that negative years supply 5
> digits.
>
> My understanding is that the number of extra digit years is adjustable. So
> it could be  0 extra digits or even 2. To quote Wikipedia:
>
> > The "basic" format for year 0 is the four-digit form 0000, which equals
> the historical year 1 BC. Several "expanded" formats are possible: −0000
> and +0000, as well as five- and six-digit versions.
>
> Source: https://en.m.wikipedia.org/wiki/Year_zero
>
> I am not sure if this means the basic format does not support extra digits
> nor negative years. If they do, then there may be ambiguity.
>
> On Fri, Feb 5, 2021 at 00:22 Christopher Keele <[email protected]>
> wrote:
>
>> > Here is another question: if we are going to parse ordinals by default,
>> how am I going to format to the ordinal format? Use strftime exclusively?
>>
>> I'm fine with that, to me this is a case of following the parsing spec
>> and being liberal in what we accept, conservative in what we emit (by
>> default).
>>
>> On Thursday, February 4, 2021 at 3:20:21 PM UTC-8 Christopher Keele wrote:
>>
>>> > Ordinal also has both extended and basic forms too.
>>>
>>> Yup, basic/extended can apply to the entire date/time/datetime string
>>> (but must be universally applied to it, saving at least some headache).
>>>
>>> > The distinction between basic ordinal and basic DateTime is a single
>>> character
>>>
>>> I agree that basic ordinals is possibly the worst way to format a date,
>>> for the reasons you describe. But it is technically unambiguous, and
>>>
>>> > There will also be ambiguity if we ever decide to support more than
>>> four digits on the year.
>>>
>>> This is technically not true for 5-digit years, so long as we choose to
>>> use ISO-8601: it has a provision for this by prefixing the year with a plus
>>> or minus. This is described as being 'by agreement only' though so omitted
>>> from my envisioned scope.
>>>
>>> In fact now that I think about it we are probably violating the spec
>>> today: we support negative signs to indicate BC for 4-digit years. By my
>>> reading of the spec we should be requiring that negative years supply 5
>>> digits.
>>>
>>> > At this point I wonder why add [ordinal dates] to the stdlib.
>>>
>>> My motive here really is just to be spec-compliant. There may be a point
>>> where we decide we are going off-spec to avoid many of the complexities
>>> raised in this discussion, happy to have that conversation too (though
>>> probably should be its own thread?)
>>> On Thursday, February 4, 2021 at 3:08:00 PM UTC-8 José Valim wrote:
>>>
>>>> Ah, thanks Kip. Ordinal also has both extended and basic forms too.
>>>>
>>>> Here is another question: if we are going to parse ordinals by default,
>>>> how am I going to format to the ordinal format? Use strftime exclusively?
>>>>
>>>> The other annoyance is while an extended ordinal is distinct enough
>>>> from a regular extended DateTime, the distinction between basic ordinal and
>>>> basic DateTime is a single character: “2020012134523”. There will also be
>>>> ambiguity if we ever decide to support more than four digits on the year.
>>>> This is enough to say that:
>>>>
>>>> * it is not possible to parse all formats within a single function
>>>> without additional user instructions
>>>>
>>>> * if the basic format supports both regular and ordinal, there can be
>>>> ambiguity if 5 year digits are ever supported in the future
>>>>
>>>> This is enough information to me that ordinal should be its own thing,
>>>> with possibly basic_ordinal and extended_ordinal, but at this point I
>>>> wonder why add it to the stdlib.
>>>>
>>>> On Thu, Feb 4, 2021 at 23:50 Kip Cole <[email protected]> wrote:
>>>>
>>>>> From ISO 8601-1:2019(E):
>>>>>
>>>>> 5.2.3 Ordinal date
>>>>>
>>>>>
>>>>> 5.2.3.1 Complete representations
>>>>>
>>>>> A complete representation of an ordinal date shall be as follows.
>>>>>
>>>>> a) Basic format: [year][dayo] EXAMPLE 1 1985102
>>>>>
>>>>> b) Extended format: [year][“-”][dayo] EXAMPLE 2 1985-102
>>>>>
>>>>> If by agreement, expanded representations are used, the formats shall
>>>>> be as specified below. The interchange parties shall agree on the
>>>>> additional number of digits in the time scale component year.
>>>>>
>>>>> 5.2.3.2 Expanded representations
>>>>>
>>>>> In the examples below it has been agreed to expand the time scale
>>>>> component year with two digits.
>>>>>
>>>>> a) Basic format: [±][year(6)][dayo] EXAMPLE 1 +001985102
>>>>>
>>>>> b) Extended format: [±][year(6)][“-”][dayo] EXAMPLE 2 +001985-102
>>>>>
>>>>> On 5 Feb 2021, at 6:45 am, José Valim <[email protected]> wrote:
>>>>>
>>>>>
>>>>>
>>>>>> I like José's suggesting of supporting a flag, but it gets kind of
>>>>>> complicated as there are several dimensions here even in our reduced 
>>>>>> case.
>>>>>> Dates, times, and datetimes support either basic or extended notations;
>>>>>> dates and datetimes support calendar dates or ordinal dates; both are
>>>>>> applicable to any parsing.
>>>>>>
>>>>>
>>>>> Are we 100% sure that ordinal datetimes are part of ISO8601? Kip, can
>>>>> you please confirm?
>>>>>
>>>>>
>>>>>> If we went with this approach I'd lean towards always accepting
>>>>>> either form for one of the dimensions, and using flags to the sigil and
>>>>>> parsing functions to indicate intent for the other.
>>>>>>
>>>>>
>>>>> I am not necessarily worried about sigils because sigils are always
>>>>> compile-time literals. It is probably fine to enforce a given format there
>>>>> rather than multiple ones.
>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to a topic in the
>>>>> Google Groups "elixir-lang-core" group.
>>>>> To unsubscribe from this topic, visit
>>>>> https://groups.google.com/d/topic/elixir-lang-core/CcXpeMQhsmU/unsubscribe
>>>>> .
>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>> [email protected].
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JNeGkCNW_6ic2XkxTkFV3uyMT%2B3EZYJuguhzzZfpOnpQ%40mail.gmail.com
>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JNeGkCNW_6ic2XkxTkFV3uyMT%2B3EZYJuguhzzZfpOnpQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>> You received this message because you are subscribed to the Google
>>>>> Groups "elixir-lang-core" group.
>>>>>
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/elixir-lang-core/15198E56-9D02-4A0E-8E6D-AB905531112A%40gmail.com
>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/15198E56-9D02-4A0E-8E6D-AB905531112A%40gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "elixir-lang-core" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/elixir-lang-core/d23cddf9-5f10-4618-b6c7-a0902b828bd2n%40googlegroups.com
>> <https://groups.google.com/d/msgid/elixir-lang-core/d23cddf9-5f10-4618-b6c7-a0902b828bd2n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "elixir-lang-core" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/elixir-lang-core/CcXpeMQhsmU/unsubscribe
> .
>
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Lxe9tgq%3DHhBaPiyYmdj%3DJHG2WKN3RqPzWi2t0FvuSEvw%40mail.gmail.com
> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Lxe9tgq%3DHhBaPiyYmdj%3DJHG2WKN3RqPzWi2t0FvuSEvw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elixir-lang-core/9EE123AF-BF27-462C-AF79-3B9406C1DD5D%40gmail.com
> <https://groups.google.com/d/msgid/elixir-lang-core/9EE123AF-BF27-462C-AF79-3B9406C1DD5D%40gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KD8WZ6VCvW_FE4DQEXO4tP6CpVwJiAw6YKpnsjr%2BkwQQ%40mail.gmail.com.

Reply via email to