In any case, we have an issue because the behavior of the Date and Month is different
-- Pavel 2017-11-20 9:16 GMT+01:00 Sven Van Caekenberghe <s...@stfx.eu>: > > > > On 20 Nov 2017, at 07:58, Alistair Grant <akgrant0...@gmail.com> wrote: > > > > On 18 November 2017 at 18:38, Sven Van Caekenberghe <s...@stfx.eu> > wrote: > >> > >> > >>> On 18 Nov 2017, at 17:46, Alistair Grant <akgrant0...@gmail.com> > wrote: > >>> > >>> On 17 November 2017 at 14:44, Sven Van Caekenberghe <s...@stfx.eu> > wrote: > >>>> Both interpretation are correct and valid, it is just hard to capture > them with one class. > >>>> > >>>> In normal human conversation and in the abstract, of course a date is > just a year/month/date triple. But that is because most people only look at > this from their own perspective. However, from an international > perspective, of course it must include time zone info. Remember > end-of-year/new-year, with all those articles about people in other > countries partying or having fireworks earlier/later. > >>>> > >>>> Date transitions are different in each time zone, so to talk > accurately about a date, you need the context of a time zone. > >>> > >>> I don't think this is correct. > >>> > >>> If we take CEST (UTC+1) and AEDT (UTC+11) as an example: From midnight > >>> to 14:00 UTC the dates are the same. From 14:00 - 24:00 CEST > >>> Australia is one day ahead. > >>> > >>> How can this be interpreted sensibly given only a date? Unless I'm > >>> missing something, I think Peter is correct and that a Date shouldn't > >>> have any concept of timezone. > >> > >> Inspect and compare the following two Dates: > >> > >> { > >> (DateAndTime fromString: '2018/01/01T00:00:00+11') asDate. > >> (DateAndTime fromString: '2018/01/01T00:00:00+01') asDate > >> }. > >> > >> This is as if you typed 'Date today' at the beginning of next January > 1st in your timezone or mine. Both print as '1 January 2018'. In some sense > they are equal (the abstract, context free view), but as a timespan > [start,stop] interval they are different, they do not include the same > points in time. By having the timezone in there, the ambiguity is resolved. > That is because the exact start moment is different: > >> > >> { > >> (DateAndTime fromString: '2018/01/01T00:00:00+11') asUTC. > >> (DateAndTime fromString: '2018/01/01T00:00:00+01') asUTC > >> }. > > > > Sven, thanks for your reply. I haven't thought about this as much as > > Richard, but came to the same conclusion. > > > > I think your comment about being equal "in the abstract, context free > > view" gets to the core of the issue. > > > > A date can be abstract, i.e. just a day, month and year, or it can be > > a timespan (a 24 hour period starting at a particular timezone). We > > may know the appropriate timezone when we specify the date, or we may > > not know until we want to use the date. > > > > As an example, take wishing someone happy birthday. I want to know > > that person's birthday in the abstract. Each year I will want to > > apply it with timezones, i.e. I'll figure out an appropriate time to > > contact them given my timezone and their's. Figuring out when to > > contact them certainly doesn't depend on the timezone I was in when I > > recorded their birthday, or the timezone they were in when they were > > born. If I want to know if that person and I have the same birthday, > > I won't be taking timezones into account. > > Well, that example is exactly why you do need the TZ (in the date or not > is another matter). If I, from my TZ, want to be the first to wish you a > happy birthday, I have to know your exact TZ. > > We can discuss about this ad infinitum. I think we all agree that there > are 2 views (abstract calendar date and concrete time interval/span, which > requires a TZ), as well as 2 possible ways to deal with the second case (TZ > inside date or as context outside of the date). > > Right now, it is TZ inside, but you are free to ignore it. That is how it > is, I did not write it, I would probably do it differently myself, but I > don't think there is a bug, nor that we have to change it any time soon. > > There are several alternative packages out there, and everyone can write > their own, maybe one will eventually become the most popular as to be the > default in the image, but I doubt it. > > > Google Calendar has (had?) exactly this problem. I entered an all day > > event as a reminder for someone's birthday. When the day came I > > happened to be in a different timezone and their birthday was from 4pm > > one day to 4pm the next. I don't remember which timezone I was in > > when I added the event, and I'm certainly not interested in figuring > > it out. Which of the two dates covered by this "one date" is > > the correct one? > > > > It should be easy to convert an abstract date to a concrete date, i.e. > > one with a specified timezone, but I think they are two different > > concepts. > > > > Thanks! > > Alistair > > > > > > > > > >> BTW, my ZTimestamp package is an alternative DateAndTime object that is > (1) always in UTC, and thus contains no timezone and (2) has second > precision. It is half the size and faster to work with. > >> > >> By using its accompanying ZTimezone class that loads the Olsen DB, you > do the necessary conversions when presenting to humans. That of course then > requires the context (current or applicable timezone) to be supplied > externally. > >> > >> (ZTimezone id: 'Australia/Sydney') gmtToLocal: ZTimestamp now. > >> > >> HTH, > >> > >> Sven > >> > >>> Cheers, > >>> Alistair > >>> > >>> > >>>> Whether that timezone is actually part of the date object is another > discussion, but there is always the timezone context even if it is implicit > ('of course I mean my own timezone and not yours'). > >>>> > >>>>> On 17 Nov 2017, at 14:19, Peter Uhnák <i.uh...@gmail.com> wrote: > >>>>> > >>>>> Because Date has, by definition, no concept of time. > >>>>> The only reason why you see it is because someone decided to save a > bit of time and reuse implementation. > >>>>> > >>>>> If you want to move TZ, you need something that _has_ time. Such as > DateAndTime. > >>>>> > >>>>> You can also read the comments ... > >>>>> > >>>>> Date > >>>>>> Instances of Date are Timespans with duration of 1 day. > >>>>> > >>>>> it represents an entire day, not a particular time point > >>>>> > >>>>> DateAndTime > >>>>>> I represent a point in time or timestamp as defined by ISO 8601. > >>>>>> I am TimeZone aware. > >>>>> > >>>>> I really don't understand why are you trying to force TZ into Date > against it's purpose when you have a class that does exactly what you want > and was built for that purpose. > >>>>> > >>>>> Peter > >>>>> > >>>>> On Fri, Nov 17, 2017 at 12:09 PM, Prof. Andrew P. Black < > bl...@cs.pdx.edu> wrote: > >>>>> > >>>>>> On 17 Nov 2017, at 08:49 , Peter Uhnák <i.uh...@gmail.com> wrote: > >>>>>> > >>>>>> I find the concept of translating TZ of a Date silly. The real bug > imho should be that it prints both time and TZ.... this is Date, not > DateAndTime. > >>>>>> > >>>>> > >>>>> I live in Oregon, and frequently work with people in New Zealand, > which is (depending on the time of year) 19 to 21 hours ahead of Oregon. > So, when it is 3pm at home, it is noon the next day in New Zealand. > >>>>> > >>>>> This means that in order to know the day of the week, the month, and > even the year, of a given instant in UTC, one has to know the timezone that > is being referred to. The answer could be Sunday, 31 December 2017 for one > observer, and Monday, 1 January 2018 for another. > >>>>> > >>>>> So, contrary to your statement, I don’t see how I can know the date > without also knowing the Time Zone. > >>>>> > >>>>> Andrew > > >