> 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/f5c4b666-2ace-4cae-ae17-6b8bd78be0bcn%40googlegroups.com.
