Date>>year:month:day: (respectively Date>>#starting:) is using DateAndTime to 
specify the start, and DateAndTime will of course differ.

To me it seems like someone was reusing implementation; because Date normally 
shouldn't have/care about time information, and yet it subclasses from Timespan 
class, which has/cares about time information. So the Date is actually encoded 
in Timespan's 'starting' instVar as DateAndTime instance, which is obviously 
breaking if TimeZone is applied.

Maybe a fix (apart from not using Time in Date) would be to make sure Date's 
methods use DateAndTime offset to 0?
Because even without daylight saving, if you create a Date instance in one 
country, and move to different TZ it should break; so always keeping it UTC/0 
would make sense to me.

Peter

On Sun, Mar 26, 2017 at 10:17:14AM +0200, Petr Fischer wrote:
> Hello,
> 
> 1) when I create date on: 2017/03/20 (before Daylight Saving Time change) 
> with this code:
> 
> D1 := Date year: 2017 month: 3 day: 26.
> 
> Date object is created with instvars:
> start: 2017-03-26T00:00:00+01:00
> duration: 1:00:00:00
> 
> 2) when I create same Date instance with the same code on/after: 2017/03/26 
> (after Daylight Saving Time change):
> 
> D2 := Date year: 2017 month: 3 day: 26.
> 
> Date instance with this instvars returned:
> start: 2017-03-26T00:00:00+02:00
> duration: 1:00:00:00
> 
> 3) D1 != D2
> 
> So, for example: persisted instance of date (Date year: 2017 month: 3 day: 
> 26) created before DST change is not equal with date instance (Date year: 
> 2017 month: 3 day: 26) created after DST change.
> DST change breaks equality of the same date :(
> 
> Is it OK?
> 
> Thanks! Petr Fischer
> 

Reply via email to