> 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