[HN Gopher] RFC 3339 vs. ISO 8601 ___________________________________________________________________ RFC 3339 vs. ISO 8601 Author : iamwil Score : 220 points Date : 2023-08-31 16:12 UTC (6 hours ago) (HTM) web link (ijmacd.github.io) (TXT) w3m dump (ijmacd.github.io) | account-5 wrote: | Damn, the timeout for redirecting me to GitHub was too short for | me to allow JavaScript in uBlock! | | Anyway, can someone with more experience tell me when the huge | ISO 8601 would be of use over RFC 3339? | | I can't imagine any application using 1% of the random formats | available. | mananaysiempre wrote: | ISO 8601 also has notations for all sort of stuff the RFC | doesn't need, like uncertain and approximate dates (for | libraries or museums perhaps), as well as repeating events, | durations, intervals, and such (some of that part is a riff on | iCal, or so I've heard); most of it is in 8601-2 (which is a | thing since the 2019 revision) but some parts are in -1. | omoikane wrote: | ISO 8601 supports all sorts of corner cases, apparently. But it | costs money to get the full standard, unlike RFCs. Someone | bought a copy and was answering questions few years ago: | | https://www.reddit.com/r/ISO8601/comments/mikuj1/i_bought_is... | | https://news.ycombinator.com/item?id=26672263 | account-5 wrote: | I was unaware that it cost money. RFC for me (I say like I'd | have a clue how to implement any RFC). | asabil wrote: | ISO8601 is a standard managed by ISO, you can buy a digital | or printed copy of the standard from here: | https://www.iso.org/standard/70907.html | | RFC 3339 is managed by the IETF, and their documents are | accessible free of charge. | mananaysiempre wrote: | > you can buy a digital or printed copy of the standard | from [the ISO] | | Or from your national member body, which for some | standards and countries can be substantially cheaper. | seabass-labrax wrote: | In Britain, standards can _sometimes_ be obtained for | free via your library subscription (which would be orders | of magnitude cheaper than the standards are directly, due | to government subsidies for libraries). | Symbiote wrote: | Representing ranges/intervals ("1st-5th of September 2023") and | periods of time ("Four days and two hours") | | It can represent a month without a day ("April 2024"), and a | year without a month ("2024"). | | In some countries week numbers are used for various purposes | ("School starts in week 33 of 2024", "Recycling will be | collected in odd-numbered weeks."). | jiehong wrote: | Durations are pretty nice and seriously missing from the RFC. | layer8 wrote: | In the general case, durations can be non-intuitive or | ambiguous when applied across DST changeovers or leap seconds, | or when they include a month count. | l0b0 wrote: | I don't think anybody involved in date/time programming | disagrees, but I'd rather have a single standard for both | than having to use two standards. | Karellen wrote: | I find it weird that there's no way to specify a future date/time | with respect to a specific timezone, e.g. Europe/London. | | I don't think it's unreasonable to want to be able to specify a | meeting in London, on July 1st 2030, at 6pm local time - no | matter what happens to UK timezones between now and then. | | The UK currently uses Z+00:00 from November to March, and | daylight savings of Z+01:00 from April to October (roughly)[0]. | But it's possible that between now and 2030 they might adopt | Central European (Summer) Time[1], or retry British Double Summer | Time[2], or scrap daylight savings entirely. Therefore, what | happens to 6pm with respect to any given epoch might vary wildly | between now and 2030. | | But it would be nice to set a calendar event for "6pm London | time", whatever London time happens to be when the event rolls | around. But there's no standardised interoperable way to say | "2030-07-01 18:00:00 Europe/London". | | [0] https://en.wikipedia.org/wiki/British_Summer_Time | | [1] https://en.wikipedia.org/wiki/Central_European_Time | | [2] | https://en.wikipedia.org/wiki/British_Summer_Time#Periods_of... | slim wrote: | Why do you think you can't do that ? | tadfisher wrote: | What if London doesn't exist by the event time? | kzrdude wrote: | I have never thought about it before, but are timezone names | like 'Europe/London' designed to not be sensitive to | political changes and not have to change? | | It could have been Country/City or Region/Country but it's | Continent/City instead. | | Continents or regions of the world don't change fast or due | to politics (not often) and cities aren't renamed or | disappear that often, so this scheme is probably a lot more | stable than any that uses political entities. (Think about | countries that split or rename or become occupied, the | locations of cities like Sevastopol (occupation), or Juba | (Sudan/South Sudan split) or Jerusalem (every controversy).) | fanf2 wrote: | Yes, the city is chosen to be the most populous in the time | zone. There's a long discussion of the policy in | https://www.ietf.org/timezones/theory.html | cesarb wrote: | > What if London doesn't exist by the event time? | | Or what if it's split into two cities, which half were you | talking about? This has famously happened with Berlin. | klysm wrote: | Then the scheduled time is probably irrelevant so who cares | MichaelZuo wrote: | Not necessarily the scheduled event may be in some other | city in a different time zone that wants this timezone for | the convenience of scheduling attendees from across the | world. | gumby wrote: | In which case a new calendar appointment will be | circulated to the survivors with location and details. | This mechanism already exists and is surely adequate. | MichaelZuo wrote: | The point is to have some means, some facility, to | schedule things 100% correctly in advance. If there | literally is no possible method then that's a pretty | surprising aspect of computer systems circa 2023. | Mayelitol wrote: | [flagged] | rini17 wrote: | You are either joking or you really think a RFC to cover such | changes is possible? If so, do you have any examples in mind? | Cities that stop existing is not a new problem. | Karellen wrote: | I'm content for that to be a failure mode of the format. :-) | throw0101a wrote: | > _What if London doesn 't exist by the event time?_ | | Europe/London will be either be left alone for historical | purposes, or aliased to its successor for backwards | compatibility. | | See _Type: Link_ and _Source file: backward_ : | | * | https://en.wikipedia.org/wiki/List_of_tz_database_time_zones | gumby wrote: | Might be hard to meet there without radiation protection. | the_duke wrote: | I usually solve this by storing an explicit named timezone in | an additional field. | klysm wrote: | Is LocalDate + LocalTime not sufficient? It seems like if you | defer to computation of the instant that would be fine | danbruc wrote: | You want three pieces of information, a date, a location and a | local time. Note that I do not think you actually want a time | zone, what if you are not in London and that place gets moved | into another timezone? | | All our common date time formats are intended to represent a | specific point in time and this you just do not have in your | case. But it is actually not too uncommon that date and time | specifications have a non-trivial structure, think a meeting on | every last Friday of the month or a monthly meeting series | starting on January 31st or two days before the end of each | quarter. | | I would guess trying to come up with a standard that covers all | the things people could come up with, would become quite | complex quickly. So if simple dates, times or instants are not | good enough, you are probably on your own, make some structure | with all the required things. | deathanatos wrote: | > _But it would be nice to set a calendar event for "6pm London | time", whatever London time happens to be when the event rolls | around. But there's no standardised interoperable way to say | "2030-07-01 18:00:00 Europe/London"._ | | The only gotcha about such a thing is that there are ambiguous | or impossible timestamps: 2023-11-05 01:30:00 America/New_York | -- that's one of two different times. | | For calendaring, it would make sense, since "same wall clock | time regardless" is what most people want1; there might be some | UI difficulty/challenges to handle the weird times, and maybe | one might want to have a way to specify a disambiguation in the | syntax. | | Thankfully for calendaring those are _usually_ in the middle of | the night, but I 've literally seen this happen in my career. | | 1though once you invite the first person in a zone that doesn't | do DST madness, note that this causes the calendar time to | wobble on their calendars. Some of my international coworkers | have to put up with this. | WirelessGigabit wrote: | If I want a meeting at 9AM MST (Mountain Standard Time, which | Phoenix observes year-round) then, when CA is on PDT (Pacific | Daylight savings Time), they have the meeting at 9AM local | time. | | But when CA switches to PST (Pacific Standard Time) the | meeting shifts to 8AM for the people in CA. | | But if the people in CA lead, and always want the meeting at | 9AM local time, then the meeting for the people in Phoenix | will move from 9AM to 10AM and back. | | Can't have it all. | extraduder_ire wrote: | This is why I prefer, and try to use, "<time> <fine- | location> time". Like: "Friday 6:30PM Vancouver time" and a | world-clock to keep track of when that is. The website | time.is is very useful for this. | | This takes a bit more effort, but it is less ambiguous and | saves you from having to deal with the insanity that is | time. DST switching will still cause issues but, as long as | you're not the one cursed to implement that software, it | should be fine with advance warning. | wahern wrote: | In the OP's example, 2023-11-05 01:30:00 America/New_York, | 1:30AM occurs _twice_ as at 2:00AM the clock rolls back to | 1:00AM. Normally this is resolved by including a | disambiguating timezone, EDT (first 1:30AM) or EST (second | 1:30AM). But if there 's no timezone indication to | accompany a geographical location, there's no way to | disambiguate the time. | jameshart wrote: | Right, to pick an actual time stamp for a particular | local time in a particular location, you need to first | choose at what time stamp to resolve the time offset for | the location. Then in that time offset you can | unambiguously map the localtime to a unique time stamp. | deathanatos wrote: | If there's no flag indicating _DST_. America /New_York is | the timezone designation. | | Part of what makes TZ discussions incredibly difficult is | that people play fast and loose with the terminology. | | I think the person you're responding to is simply saying | that if you made the meeting in a non-DST observing zone, | the meeting time would still wobble in a DST-observing | zone. (I'm not sure why they're noting it, because my | comment also clearly spells that out, too, albeit in | reverse. But yes, it works both ways.) | deathanatos wrote: | I'm well aware. See the footnote. | | I know it works both ways, too, but probably would be | better for the DST observing zone to deal with the effects | of DST, instead of foisting such side effects onto our | international friends. | [deleted] | jiehong wrote: | In the calendar world (iCal), this is actually supported: a | date time without a time zone is a local time only [0]. | | [0]: https://www.rfc-editor.org/rfc/rfc5545#section-3.3.5 | Karellen wrote: | But if I send that to someone who is in a different timezone, | e.g. in America/New_York, will it put the event at 6pm | _London Time_ in their calendar, so that they can videocall | in at whatever time that is where they are? | michaelt wrote: | The ical format allows dates like _DTSTART;TZID=Europe | /London:20230901T201000_ | | Whether your calendar software will let you choose how it | expresses the timezone and whether the recipient's calendar | software will store it that way is another question... | nightpool wrote: | Google Calendar does, at least. It even supports | representing events that being and end in different | timezones (like a plane flight or a cross country trip) | wrs wrote: | Not quite -- that requires you to find the time zone locality | out of band somehow. The request is to have a standard way to | store the time zone (not the _current offset_ of the time | zone) in the same string as the date /time. | codetrotter wrote: | Yup. Similarly with the time zone aware Rust crate "chrono" | you also have datetime representations for local time called | "naive" datetime to store date time without time zone. | | And likewise in PostgreSQL you can store timestamp without | time zone. | | Combine that representation with lat/long gps coordinates and | you have what you need for scheduling future events at | specific locations regardless of changes in time zone names | and offsets. | fanf2 wrote: | As well as what wrs said in a sibling comment, iCalendar does | not have a way to specify the location of a meeting in a | machine-readable way that can be turned into the timezone for | that location. | | Sadly, iCalendar is very much tied to using timezones for | locations. I expect that if/when Europe finally gets round to | abolishing DST, there will be some significant changes to the | timezone boundaries, and as a consequence, much hilarious | calendaring failure. Dunno if it will affect as many people | as the 2007 DST changes in North America, which caused a lot | of extra work for people running Microsoft Exchange, because | it was designed assuming that timezones never change. And | this design error carries over to iCalendar, tho (apart from | tz boundary changes) it is better than it was. | jbandela1 wrote: | I think you want it more specific than a timezone. | | For example, instead of London, suppose you wanted to meet in | Glasgow, Scotland, on July 1st 2030, at 6pm local time. | | Currently, Glasgow in is timezone Europe/London. | | However, it is not unimaginable that in that time, Scotland | could hold another referendum on independence and either join | Central European Time, or create Scottish Standard Time. | jvanderbot wrote: | And so, you want a probabilistic time estimate based on the | likelihood of that passing? | toast0 wrote: | I think it's reasonable to estimate the future time based | on the current published rules. You don't need to guess at | the probability of future published rules, but you do want | to have sufficient information to reevaluate the published | rules. | | This is why storing UTC dates for future events is | insufficient: if the event is actually specified in local | time, the date is incorrect when the time zone rules are | changed. But storing the time zone is insufficient if the | time zone that applies to the event also changes; you also | need to store enough information to reevaluate which time | zone is applicable. | | Of course, it can be difficult to gather this information | in a user friendly way, so you know, compromises. | codetrotter wrote: | Store the gps coordinates of the location for the meeting | instead, along with the desired local time and local date. | isbvhodnvemrwvn wrote: | This limits your meetings to surface of earth, what if I | want to meet with you on Mars? | jvanderbot wrote: | But the local time would change according to GP's | comment. | codetrotter wrote: | The top level comment said | | > specify a meeting in London, on July 1st 2030, at 6pm | local time - no matter what happens to UK timezones | between now and then | | GPS coordinates + local date and local time will preserve | "a meeting in London, on July 1st 2030, at 6pm local | time" in the desired way | jvanderbot wrote: | How: 6PM local time could mean Zulu+6 or Zulu+3 or | anything else if local timezone offset changes via | legislation. The best way to do it would be to say "X | seconds from the time this message was sent" | avianlyric wrote: | > 6PM local time could mean Zulu+6 or Zulu+3 or anything | else if local timezone offset changes via legislation. | | That's the point. Normal people think about time based on | their local time. If they agree to meet someone at 3pm on | a day in the future, that normally means turning up on | that day when a local clock on that day reads 3pm. If | local time changes offset from UTC, then the meeting | implicitly also changes. | | I've personally yet to meet someone that reschedules all | their appointments every time day light saving (or the | inverse) rolls around. Just make sure their appointment | times in UTC don't change. | kelnos wrote: | +6 or +3 is irrelevant to the scheduler when they're | setting the meeting time: they want it to be 6pm | regardless of any time zone changes in the future. So | they deliberately do not store the UTC offset with that | time. They only store the geographic location. | | Then when the meeting time is approaching, the software | can figure out what time zone (and UTC offset) applies, | after taking account any time zone changes that have | taken place in the intervening years, and appropriately | set reminder notifications. | | If they were to store "X seconds from the time this | message was sent", then any time zone change would likely | make it _not_ fall at 6pm on the target day, so that 's | not what they'd want. | noselasd wrote: | "X seconds from the time this message was sent" would | certainly not hit 6PM local time if the local timezone | offset changed - unless you also update X every time it | does. | wrs wrote: | The point is that the local time would _not_ change, even | though the offset between UTC and local _did_ change. | jvanderbot wrote: | I see. | | The problem is there is no difference between local time | and "offset from UTC", right? | kelnos wrote: | Local time has no notion of a UTC offset. Local time is | just "9am on August 31, 2024". It's up to the | application's implementation details to pair it with a | physical location (e.g. some lat/long in London). The app | would then have to (as the event date approaches) resolve | that into something more computer-clock-understandable; | that is, it would have to say "this lat/long is located | in timezone XYZ, which has offset ### for that date", so | it could tell the OS's notification service to pop up | reminders at the appropriate times. | codetrotter wrote: | > there is no difference between local time and "offset | from UTC" | | The difference is between applying the UTC offset for a | future event using present rules. What we are saying is | you should not do that because the rules can change. | | I ask you today that we meet at 3PM on January 24th in | 2026, at the train station in Berlin. | | In my paper calendar book for I mark the date January | 24th 2026 with the following note: "meet jvanderbot at | 3PM at the train station in Berlin". | | I carry this book with me for the next few years. | | Meanwhile, you decide to be modern so you store a note | about the meeting in a database. In doing so, you convert | the information into a UTC offset for that future time. | But you are using current rules for today, which may | change. | | And then when the day arrives, there has been political | changes in the meantime that made it so that the utc | offset is different. | | Because you converted to utc offset ahead of time, your | representation of the time no longer maps to "3 PM" but | instead to let's say "4 PM". | | I show up at 3 PM local time, as we had agreed. But you | are nowhere to be seen because in your digital calendar | the meeting appears to be for "4 PM". | | This is what we mean when we are talking about the | problem with converting a local time to a UTC offset a | long time ahead. | scbrg wrote: | As long as the invited people don't change nationality... | | https://www.972mag.com/the-worlds-only-ethnic-time-zone/ | | If there's one thing I've learned about time keeping, | it's that whenever you think you've got it all figured | out, there's always one more corner case. | stouset wrote: | That seems to be in line with what GP wants. | jvanderbot wrote: | I see. I misunderstood! | layer8 wrote: | The problem is that we don't know what the timezone | identifiers for hypothetical future timezones will be. | Meaning, there would be no automated way to associate those | future-date-time values with the correct timezone once the | new timezone is added to the tz database. | | One could imagine using geo coordinates or similar, but the | mapping from those to timezones (or from/to zip codes or area | codes) is already not precisely defined. | | If you use city names, those might also be split/merged | (Berlin) or renamed (Constantinopel). | naniwaduni wrote: | What time zone people use at a given location is not even a | function of geographical location; you plausibly also need | to know language, culture, political affiliation, and/or | employment status. | chaz6 wrote: | If you use coordinates, make sure to take into account | continental drift. You could use a plate-local coordinate | system (e.g. British National Grid for Great Britain) so | you only need to take into account deformation. | | There is actually a good read on this at | https://www.ordnancesurvey.co.uk/blog/is-britain-on-the- | move | crooked-v wrote: | What about storing current geo coordinates and a | timestamp of when they were recorded? I feel like that | should be enough for a theoretical future system to | adjust mapping for continental drift. | joshspankit wrote: | Especially assuming an increase in computing intelligence | in that time. | [deleted] | mikequinlan wrote: | >there would be no automated way to associate those future- | date-time values with the correct timezone | | You could develop a way to specify a location and indicate | that you mean 'local time' at that location. | djbusby wrote: | The zone database recently had a city spelling change on | Kiev to Kyiv | ilyt wrote: | _change_ or adding same entry with the name of city | changed ? | | Coz change like that could fuck some shit up... | LegionMammal978 wrote: | A link was added from "Europe/Kiev" to "Europe/Kyiv" in | the included-by-default backward file [0], so that any | user that doesn't exclude that file will simply treat the | old name as an alias for the new name. | | [0] https://github.com/eggert/tz/commit/e13e9c531fc48a04f | b8d064a... | 1-more wrote: | There are a few kinds of entry in the tz database. | Europe/Kiev is now a Link entry to Europe/Kyiv which is a | Canonical entry. Europe/Kiev used to be a canonical | entry. What's interesting is there's a lot of thoughtful | commentary about changing the name and handling the | annexation of Crimea long before Russia invaded Ukraine | | For example: https://data.iana.org/time- | zones/tzdb-2020d/europe (search for Kiev for the specific | part; it's a very long file) | ilyt wrote: | 2030-07-01T18:00:00~Scotland/Glasgow ? | lmm wrote: | > However, it is not unimaginable that in that time, Scotland | could hold another referendum on independence and either join | Central European Time, or create Scottish Standard Time. | | Or be in the middle of a political dispute, with different | times being used depending which side one is on, like | Xinjiang. So just knowing the place and local time isn't | enough. | ydnaclementine wrote: | Potential RFC idea? | ainar-g wrote: | There are a few ways to represent that in the database, see[1]. | Unless I misunderstood what you mean by "no way to specify". | | [1]: https://codeblog.jonskeet.uk/2019/03/27/storing-utc-is- | not-a... | LegionMammal978 wrote: | There's currently a draft document for such a format [0], | called IXDTF (the Internet Extended Date/Time Format). It | allows you to specify a timezone (as a tz name) in brackets | following an RFC 3339 string. To give a local time, you have to | specify your best estimate of the UTC offset alongside the | bracketed timezone. For instance, "2030-07-01 18:00:00 | Europe/London" would be | "2030-07-01T18:00:00+01:00[Europe/London]". | | If the UK changes its rules before that time, then the | timestamp becomes "inconsistent" (see section 3.4). The | behavior on an inconsistent timestamp is left for the | application to decide, but if a ! character is included within | the brackets before the timezone name, then it's at least | obligated to detect the problem instead of blindly following | the UTC offset: | | > In case of inconsistent time-offset and time zone suffix, if | the critical flag is used on the time zone suffix, an | application MUST act on the inconsistency. If the critical flag | is not used, it MAY act on the inconsistency. Acting on the | inconsistency may involve rejecting the timestamp, or resolving | the inconsistency via additional information such as user input | and/or programmed behavior. | | This extended timestamp format is used in the proposed Temporal | library for JavaScript [1] (though I'm not sure if it supports | the ! character). The ZonedDateTime.from() parsing function [2] | takes an optional "offset" parameter to allow the user to | control which part of an inconsistent timestamp takes | precedence. It also supports simply omitting the UTC offset and | using only the timezone, but it warns that this is ambiguous | for times in the repeated hour during a DST transition. | | [0] https://www.ietf.org/archive/id/draft-ietf-sedate- | datetime-e... | | [1] https://tc39.es/proposal-temporal/docs/strings.html#iana- | tim... | | [2] https://tc39.es/proposal- | temporal/docs/ambiguity.html#ambigu... | djbusby wrote: | Maybe | | ` 2030-07-01T18:00:00[!Local] ` | | Where no offset and the !Local tell the app to use OOB | defined location? | ilyt wrote: | maybe ~ ? 2030-07-01T18:00:00~BTC | 2030-07-01T18:00:00~CEST | 2030-07-01T18:00:00~Local | 2030-07-01T18:00:00~Europe/Warsaw | | to signify it is not a constant point in time but timezone- | at-the-time dependent. | mjevans wrote: | The issue is, what do you mean? | | This time description in the indicated timezone, at the | instant it is correct? (Ignore updates, I mean the time I | said. E.G. The doors open at 8am every day.) | | An indicated end of a duration, such as the period of | time a mass of decaying radio-isotopes are valid for the | sensor during? (Offhand, no consumer equipment comes to | mind, but for an extremely sensitive calibrated sample it | could matter and this is a contrived example.) Exact | moment in monotonic time. (What about stretchy leap | seconds too?) | | Something between the two extremes? | | Most humans probably want a default of something like... | | "Looser more common use time unless I get more specific." | So if a TZ is included, it isn't a fixed moment, but | whatever specifier is the valid moment as that moment | passes. Convert it to an absolute monotonic value at that | time to record the event and not just the specification | of when to capture the event's passing. | | E.G. Unix time Epoch was 1970-01-01 00:00:00~Z with an | absolute reference value of 0s DATE RoundedHour~US.EST => | Actually is EDT but most people don't use that notation, | and congress changed when DST happens yet again without | abolishing it too, and this happened last year before the | change but the event did run from Noon to 9PM with these | event moment second values... | seabass-labrax wrote: | That's an excellent idea, and one which I should hope to | implement in my calendaring software if it is accepted. Are | you one of the authors? | LegionMammal978 wrote: | No, I'm not affiliated with the authors, I just recalled | seeing the extended syntax when I looked into Temporal's | features a while back. | ivan_gammel wrote: | It's LocalDateTime AND geographic coordinates, not a name of a | timezone. Maybe we need an ISO standard for universally | accepted location/event identifiers or an URI schema, eg: | event://de/Berlin/10557/Platz+der+Republic,+1/Bundestag#2030-08 | -30T18:00 | jameshart wrote: | Yes the basic problem here is that people for some reason | think that a time zone is a property of a _time_ when in fact | a time zone is a property of a _place_. It's actually a | _mutable_ property of a place, to make things more complex. | lmm wrote: | Places do not necessarily have a single agreed timezone - | see Xinjiang (or indeed Crimea). | codetrotter wrote: | Country borders can change, city divisions can change. Street | names can change, and streets can disappear. | | Use GPS coordinates instead :D | lxgr wrote: | Nice idea in theory, but then you need to accommodate for | continental drift as well :) | ivan_gammel wrote: | I was expecting that comment and this would be my | preferred answer. | ivan_gammel wrote: | Not instead, but in addition to. Maybe 3rd element of the | vector must be the moment when the identifier was created, | so that knowing history of the location it could be | possible to adjust it to the current coordinates. | rini17 wrote: | That won't help if the Bundestag moves into another | building. If country borders change, that is also likely to | occur :D | tonyhb wrote: | This is supported in Google Calendar. You set the TZ when | you're creating an invite. | crooked-v wrote: | Of course, then you get into the problem of whether you want to | store that by time zone, or by actual physical location. If | it's the latter, you might have to deal with the time zone that | covers that location changing at some point between now and | then, like when Kazakhstan merged what were previously two | separate time zones into one. | CodesInChaos wrote: | One complication with that format is that local time can be | ambiguous or not exist at all, if the time is during DST | switching. | codetrotter wrote: | Add one extra bit to store "disambiguation". | | Value 0 meaning "if there is a DST switch, interpret the time | as the chronologically earlier one" | | Value 1 meaning "if there is a DST switch, interpret the time | as the chronologically later one". | CodesInChaos wrote: | Yes, a suffix like `S`/`W` (for Summer/Winter) or `+`/`-` | in place of Z would help with disambiguation. | | But you still need to handle the case where the local time | is skipped. You could pick the timestamp during which the | skip happens, but that'd lead to an offset that can contain | fractional seconds, which almost no datetime library | supports. | proto_lambda wrote: | That works until a country decides to hop across the | international date line the day after they switch from DST | to normal time, and the timestamp occurs three times ;) | mike_hock wrote: | > But it's possible that between now and 2030 they might adopt | Central European (Summer) Time[1], or retry British Double | Summer Time[2], or scrap daylight savings entirely. | | Yes, and maybe East London secedes from the UK and uses a | different time zone, so Europe/London doesn't specify the time | zone you meant, anymore. This might not be likely for London, | but if it's in the countryside of a less stable country and you | just specified the time zone as the capital city, this might | happen. | | I prefer time formats that are actually implementable and don't | depend on a large database that can change at any moment. | koliber wrote: | The current time formats depend on databases that can change | at any time. I haven't found one that is implementable and | usable in the real world that does not depend on something | that can be changed. | | Countries change. Timezones change by decree. This is a pain | but it's the real world and our tools need to be able to deal | with it. I don't like it either, and no one cares, nor should | they. Reality trumps preference. | crote wrote: | The problem with ISO 8601 is that it _isn 't_ properly | implementable. Anything except Zulu time is basically broken. | | The tz database is updated on average every two months, and | that doesn't happen without reason. Countries keep changing | their timezones, and a rather high-profile one is the | European Union's plan to get rid of DST over the next few | years. This is already happening in Greenland _this year_. | Some Muslim-majority countries also like to make their DST | depend on Ramadan - which falls on a different and somewhat | unpredictable date every year. | | Like it or not, if your code uses future dates and does not | rely on "Europe/London"-style timezones, you _will_ be slowly | corrupting your data. | mike_hock wrote: | > Anything except Zulu time is basically broken. | | How so? 2030-07-01T18:00:00+01:00 is a well-defined point | in time, is it not? It may or may not be local time in | London, but it's unambiguous. | | July 1st 2030, at 6pm, Europe/London is not. What's broken | is the idea that you can somehow standardize "local time at | a particular place" in a way that magically survives any | arbitrary policy change. | | > Some Muslim-majority countries also like to make their | DST depend on Ramadan - which falls on a different and | somewhat unpredictable date every year. | | Thus proving that what you want does not exist and cannot | exist. | lmm wrote: | > How so? 2030-07-01T18:00:00+01:00 is a well-defined | point in time, is it not? It may or may not be local time | in London, but it's unambiguous. | | It's a redundant way of writing 2030-07-01T17:00:00Z | which only serves to cause confusion (it misleadingly | looks like a local time, but it isn't). TAI or equivalent | are useful; symbolic timezones are useful; numeric time | offsets are useless and there's no benefit from having | them be part of the standard. | | > Thus proving that what you want does not exist and | cannot exist. | | Of course it does; 2030-07-01T18:00 Africa/Casablanca is | a real time that humans will have no trouble attending a | meeting at, and nor will computers as long as they've | been keeping their zone file up to date. All we need is a | standard for storing and interchanging it on computers. | tux1968 wrote: | > How so? 2030-07-01T18:00:00+01:00 is a well-defined | point in time, is it not? It may or may not be local time | in London, but it's unambiguous. | | Being unambiguous isn't helpful if it is wrong. It is a | very common desire to want to set a meeting based on the | local time of a destination. The only future-proof way to | store such a time, is to remember the destination and the | desired local time. This is the only way the proper | moment can be calculated and kept in sync with reality. | | The unfortunate fact is, the local time could be altered | by decree, in any number of ways, in the interim timespan | between setting a reminder, and when it happens. | jameshart wrote: | In general one problem with that request is that it's possible | to specify times that might not actually happen. | | 2030-03-24 01:30:00 Europe/London seems like a perfectly | reasonable time stamp. But if the UK decides to move BST | forwards by a week between now and 2030, that time won't ever | happen. | gorgoiler wrote: | Having the tzdata zone at the end, after a space, makes perfect | sense. I think you just invented the new standard? | | A wall clock / human readable time without a TZ is like a... | | ...a horse without a field? | | ...a burger without knowing the meat? | | ...a photograph of a star without a position? | | ...a lover without a name? Ok maybe too far. | | ...a bonus without knowing the currency? | jvanderbot wrote: | It's in ISO 8601. See the "Z"? that means "Zulu" or "+0". You | can specify any offset. This is standardized and immutable. | What offset is correct, however, can change due to local | madness, and no standard could possibly keep up. | | But I do love the `date` utility, which allows alphanumeric | time zone abbreviations pretty well. | pas wrote: | the standard could simply allow county/city specifiers. or | GPS coordinates. | deathanatos wrote: | It's not in ISO-8601. | | The suggestion above is to have the _zone_ in the | timestamp. ISO-8601 and RFC-3339 put the _offset_ in the | timestamp. | | Zone and offset are different concepts: the up-thread | comment's poster's example of Europe/London is one zone, | that currently has two offsets, depending on time of year. | | The up-thread comment includes a very practical example | that any app dealing with something like an "appointment" | would have to reckon with. | crote wrote: | ... which means ISO 8601 cannot deal with timezones but | only UTC offsets - which are temptingly useful but | fundamentally broken. | | Including fixed UTC offsets was a massive mistake and it | should have never happened. Anything except named timezones | is useless. | lxgr wrote: | I personally find UTC offsets pretty useful for (free- | form) meeting scheduling, i.e. "see you at 15:00 (UTC+2)" | beats "see you at 15:00 (CET)". It makes quick mental | math to figure out what that is in my current timezone so | much easier. | | Otherwise, I'm also always left wondering whether they | really meant CET or actually CEST, calculating what the | current offset of CET is, double-checking whether there's | some other CET that I might be confusing things with | (China Eastern Standard Time?) etc. | michael1999 wrote: | Offsets are just fine for timestamps, and other | historical data. And much simpler than having to maintain | history of TZ data, and trusting that all your | collaborators are using the same TZ db. | | It is only scheduling future events where they fall down. | Calendars and scheduling are demanding applications. | gorgoiler wrote: | The meaning of a wall clock time is based on the legal | jurisdiction of where the clock is located. It is the local | law which sets the daylight savings time rules. These are | commonly written as TZ / tzdata / IANA names, as in | "Europe/London" from the person to whom I replied. | | https://en.m.wikipedia.org/wiki/Tz_database | | Even this is not enough for some edge cases like "I shall | take my supper every day at 6pm, Jeeves" but one can always | find exceptions to anything. | cratermoon wrote: | Notice there is no format in which timezone is specified as 4 | digits without the colon, and yet 'date +%z' returns +-NNNN. | aendruk wrote: | Thankfully we have %:z. Relatedly, it's possible to teach date | to do this by default: | https://gist.github.com/d081dad407432d53172e30d0d35c39db | $ date 2023-08-31T11:15:00-07:00 | cratermoon wrote: | +%:z is a gnu-specific extension, though. The gist you linked | works with gnu libc, but I'm not aware of a POSIX-compliant | way to do it. | CodesInChaos wrote: | One part of RFC 3339 I dislike is `Z` vs `+00:00` vs `-00:00` | | > Unknown Local Offset Convention | | > If the time in UTC is known, but the offset to local time is | unknown, this can be represented with an offset of "-00:00". | | > This differs semantically from an offset of "Z" or "+00:00", | which imply that UTC is the preferred reference point for the | specified time. | | `Z` should have been used to represent the unknown local time | case, and `-00:00` shouldn't exist, while `+00:00` could be used | if UTC is the preferred reference point. | | In practice `Z` is already used for the "no preferred local time" | case very often. | taftster wrote: | Fixed this for you: In practice `Z` is | already used *wrongly* for the "no preferred local time" | burkaman wrote: | Wow that is very surprising, I always thought -00:00 was just a | synonym for +00:00. That seems almost intentionally misleading, | why not Z like you say or just +? or something? | [deleted] | foresto wrote: | Reminds me of the +1 / -1 / +0 / -0 convention that was once | common in open source development discussions. For example: | | https://community.apache.org/committers/consensusBuilding.ht. | .. | | I wonder if that convention had something to do with this | choice of syntax. | mankyd wrote: | Thank you for this comment. I saw the `-00:00` in the RFC 3339 | bubble, and was confused as to why it wasn't mutually agreed | upon. Your comment makes clear the the `-` has special meaning | that I hadn't picked up on. | toast0 wrote: | I thought Z was a reference to (NATO) Military time zones [1], | where Zulu Time Zone is equivalent to UTC+00:00, but uses fewer | characters. | | iCal uses the Z to indicate times intentionally in UTC as well, | as opposed to times without a time zone indicator (use unknown | local time), or times with an explicity time zone indicator. | | Using Z to indicate 'please use whatever local time seems | appropriate' seems like poor practice, even if it's a common | one. | | [1] https://en.wikipedia.org/wiki/Military_time_zone | CodesInChaos wrote: | In my experience "this timestamp is UTC, show it to the user | in whatever timezone they might be in" is the most common | case for times in an API/file format, so giving it the Z | shorthand makes sense to me. | | While when using an explicit time offset, `+00:00` doesn't | appear particularly special or more common than other | offsets, so I don't think a shorthand for this case is | useful. | ledauphin wrote: | the tables agree that microseconds are supported by both | standards, but for some reason the Venn Diagram only displays | 6-digit fractional seconds under ISO8601. This led me to do some | head-scratching until I referenced the table, which seems a lot | more comprehensive. | | This is extremely cool and useful overall, but unfortunately the | Venn Diagram seems to be slightly misleading. | jmull wrote: | What a great visualization for this. | | I'd prefer to use space (or underscore) instead of T to separate | the date and time parts, but generally stick with T to avoid | problems with anything that can only handle ISO 8601 (and to be | consistent). | cryptonector wrote: | I prefer T because nothing will be splitting these strings on T | by accident. | Alupis wrote: | Two questions: | | 1) What is the reasoning behind 6 digit years? Surely any system | contrived today will not exist in the year 100,000. | | 2) ISO 8601 is prolific. Is RFC 3339 well used/adopted in any | system? | noselasd wrote: | > 1) What is the reasoning behind 6 digit years? Surely any | system contrived today will not exist in the year 100,000. | | But ... I want someone to put together a simulator that can | estimate where Voyager 2 will be at e.g. 020000-01-01 | starlevel003 wrote: | > ISO 8601 is prolific. Is RFC 3339 well used/adopted in any | system? | | 90% of the time when a library says ISO 8601 it doesn't | actually implement the more esoteric parts of ISO 8601. | PhilipRoman wrote: | Judging by the time it takes to completely migrate away from | old technologies, I wouldn't be surprised if we will be | emulating x86 on our quantum computers in the year 100k. | throw0101a wrote: | > _2) ISO 8601 is prolific. Is RFC 3339 well used /adopted in | any system?_ | | ISO 8601 was first published in 1988. RFC 3339, while | ostensibly dated July 2002, codifies practices that date back | to Usenet and e-mail (RFC 822: August 1982), and perhaps to the | _date_ utility (which existed in Version 1 AT &T UNIX). | pdw wrote: | Nah, email and classic Unix use entirely unrelated date | formats. The RFC 822 format looks like "Thu, 31 Aug 2023 | 20:53:11". Unix / ctime(3) uses "Thu Aug 31 20:56:52 2023". | robobro wrote: | RFC 822 is what RSS feeds use and RFC 3339 is what Atom | feeds use. | | I don't know about you, but I think RFC 3339 dates are much | more appealing :) | rowanseymour wrote: | I could imagine scientific tooling wanting to represent dates | in the far future. | paulddraper wrote: | Y10k (: | dabluck wrote: | man the year 10,000 is really going to break a lot of software | systems that assume a 4 digit year | chungy wrote: | Possibly; this assumes that our current calendar's epoch | holds, that humanity is still around, that computing systems | are still around, and legacy software from 8,000 years past | is still kicking people in the butt. | | Given that electronic computing has only existed since | approximately the 1930s, it's probably premature to worry | about what will happen 8,000 years from now. | airstrike wrote: | Worse case scenario we can get around to updating stuff by | the time we hit the year 9,900 or so | Macha wrote: | The ISO8601 standard is behind a paywall, and consequently many | of the "ISO8601" functions in programming languages and | libraries don't actually support anything but the subset that | is also RFC 3339. | rendaw wrote: | Both Golang (official time package) and Rust (Chrono) have | built in tools for dealing with RFC 3339 but not for RFC 8601. | IIRC I read about issues with ambiguity in RFC 8601 not present | in RFC 3339, and again IIRC Python had issues round-tripping | dates because of this. | Alupis wrote: | Interesting. This is the first time I'm even hearing of RFC | 3339. ISO 8601 is just taken for granted everywhere... | languages, tools and services (databases, etc). | | Admittedly I've not worked with Golang or Rust, and my Python | has been limited to scripting more than developing. | pdw wrote: | Almost everything that claims to implement ISO 8601 | actually implements RFC 3339 instead. | rowanseymour wrote: | I think a lot of people assume ISO 8601 just means | 2023-08-31 / 2023-08-31T14:55:30Z.. if only | cryptonector wrote: | It's ISO 8601, not RFC 8601 (which is `Message Header Field | for Indicating Message Authentication Status`). | mitthrowaway2 wrote: | Perhaps 6 digit years are intended to be useful for | representing prehistoric dates? | MattSteelblade wrote: | It bothers me on a regular basis that there is no RFC 3339 | acceptable way to include date and time in a file name in Windows | as a colon is a special character. I also wish you could use | hyphens in the date while ignoring the colons and still be ISO | 8601 compliant, for example 20230831T1510-0500 is compliant and | can be used in a filename, while 2023-08-31T1510-0500 (and | similar variants) is not. As an aside the "Get-Date" function in | PowerShell doesn't understand the first timestamp without the | hyphens and colon. | cryptonector wrote: | Removing the colons is perfectly safe and will not render | RFC3339 dates and date-times ambiguous, and you can always | losslessly restore those colons. | tengwar2 wrote: | I hadn't realised that there was a problem with Windows. MacOS | has a different problem with a colon in a file name. For two of | the three most popular operating systems to have this problem | does show a distinct lack of thought. | coding123 wrote: | Time and money - the two things we literally can't solve even | with AI. | kuon wrote: | Most of the time RFC is the way to go as ISO specs are not | available for free and many open source implementation are | actually not fully open source compliant because based on drafts. | It's also a really big effort for open source devs. | | Also, if you are working on anything dealing with date in the | future, you nearly always want to store wall clock time + | location. Sadly, there is no standard for that. | | In Europe and USA the timezones are quite stable, so we might not | be confronted to this, but in many places timzones change quite | often, and storing an offset is not stable. Having "june 5 2026, | 13h30 wall clock, paris" is what most people will mean, and it | might be UTC+2 or UTC+1 depending if EU finally decide on what to | do with DST. | | And finally, if you write an API with times in the past, just use | POSIX timestamps in seconds, ms, us or ns. | toast0 wrote: | > Also, if you are working on anything dealing with date in the | future, you nearly always want to store wall clock time + | location. Sadly, there is no standard for that. | | iCalendar is _an_ RFC standard for this. [1] Note that some | times have two representations and some times are not | representable in this format when there 's a time change due to | DST. | | iCal also does not contemplate a location being reassigned to a | different time zone, an issue discussed elsewhere in this | thread. | | Of course, properly formatted iCal files also include data for | all of the referenced timezones. Which makes it cumbersome if | you just wanted to output a single datetime. | | [1] https://icalendar.org/iCalendar-RFC-5545/3-3-5-date- | time.htm... | Symbiote wrote: | 2023-08-31/28 | | I don't think that's valid, as the abbreviated form allows | excluding identical parts, so expanded this is | 2023-08-31/2023-08-28 | | which has the start time after the end. | devmunchies wrote: | An often ignored part of the standards are how to represent | durations (time spans). | | See http://xml.coverpages.org/ISO-FDIS-8601.pdf (section: 5.5.4.2 | Representation of time-interval by duration only, pg. 21) | | Would like to see more json parsers in static languages allow me | to define a field as a time span and can serialize into the valid | format. | | For an example, see this proposal in Crystal: | https://github.com/crystal-lang/crystal/issues/11942 | Example: A duration of 15 days, 5 hours, and 20 seconds would | be: P15DT5H0M20S A duration of 7 | weeks would be: P7W | duped wrote: | Why do you want a string format for data that can be | structured? "duration": { "days": | 15, "hours": 5, "seconds": 20 } | | Now it's not the job of your JSON parser to understand the | semantics of your data. It's your input validator's - which is | how it should be, imo. | | Note you will have to have some fallible conversion step from | whatever JSON chooses to represent that data as anyway. | atoav wrote: | Because there can be benefits to having it compact and yet | human readable? 2023-08-24T20:30:00Z | | versus "time" : { "year" : | 2023, "month" : 8, "day" : 24, | "hour" : 20, "minute" : 30, "second" | : 0, "timezone" : "UTC", } | | Call me lazy, but tryping the latter took me 20 times longer. | I totally would use it for internal state, but I would not | store it like that or expose that to users ever. | duped wrote: | But you're talking about JSON, not a concise string that is | exposed to users, and not a data format optimized for size. | If you want more than a basic type you give it structure - | and durations are not trivial types nor common enough to | deserve their own representation. | | Durations optimized for storage without ambiguity would be | the tuple (u64, u32, u8) where the first value is seconds, | second value is nanoseconds (if precision is needed) and | final value is epoch. | | Durations displayed to a user wouldn't ever be stored so | the point is kind of moot. | | Optimizing for "time it takes someone to write it once" is | kind of dumb since it happens once while reading it happens | often, and parsing even more likely. | NikkiA wrote: | 6 digit years seem like a solution to a problem that will never | be for the sake of looking forward thinking. There's absolutely | no way current technology or social norms will last 8000 years. | sedatk wrote: | It just makes great easter eggs. | | "Hey, this guy had set his reminder to today. I wonder what | he'd think if he knew we actually saw this 56,000 years later" | | "Well, let's regenerate him and ask" | atoav wrote: | Yeah, but don't forget we use computers for things that don't | involve today only. | | Let's say you run a climate calculation for long enough for | example. Now you could just say "fuck dates" if they error -- | but wouldn't it be kinda nice if they didn't? ___________________________________________________________________ (page generated 2023-08-31 23:00 UTC)