On 13.09.21 16:38, Woody Gilk wrote:
On Mon, Sep 13, 2021 at 9:26 AM Larry Garfield <la...@garfieldtech.com>
wrote:

On Sun, Sep 12, 2021, at 12:53 PM, Andreas Heigl wrote:
Hey all.

Some months of work have past for the Working Group for PSR-20
(ClockInterface).

By now our idea of the interface has stabilized, a lot of internal
decissions have been made and a lot of discussion with different people
– especially maintainers of different clock implementations – have been
done and had their influence on the interface and on the meta-document
associated with it.

Time to open up the discussion to the list and to external feedback.

Please give feedback regarding the Interface[1] and the
Meta-Document[2]. Either on the PSR-20 Channel on Discord[3], via the
mailinglist or via PullRequests against those two documents.

Cheers

Andreas

[1]

https://github.com/php-fig/fig-standards/blob/master/proposed/clock-meta.md
[2]
https://github.com/php-fig/fig-standards/blob/master/proposed/clock.md
[3] https://discord.com/channels/788815898948665366/818850995186171918

I filed a small PR with some typo fixes. Nothing major.

Overall I like the simplicity of it.  My main concern is, unsurprisingly,
around the timezone question, and usability.

Right now, if I want "now" I can just call `new DateTimeImmutable('now',
new DateTimeZone('whatever'))` directly.  It's a single call.

With the proposed interface, I will virtually always need to create TWO
DTI objects; one that gets returned by now(), and one returned by calling
setTimezone() on it.  (Because I never trust what the system timezone is
set to, and neither should you.)  That is slightly less performant, and
also clunkier feeling.  And that means people will forget to do it.

I fear that, in its current form, we'll end up with a lot of people
assuming the timezone they get back from now() is reasonable, when in fact
it's not defined at all, and end up with subtle bugs.



I feel like the timezone concerns are not as dire as they might initially
seem, because:

1. It is easy to wrap this interface with a local implementation that will
always return the date object in (eg) UTC. It's about 3 actual lines of
code.
2. In environments that we (really do) control, we can set `date.timezone`
and not have to think about it again.

That being said, I think it would also be reasonable for
`ClockInterface::now()` to ALWAYS return a date in UTC timezone. That would
create a stronger definition and eliminate most concerns about time zones.
Nope.

If you are actually using timezones (Timezone type 3) then there is no need to convert to UTC. On the contrary, it might be a bad idea to convert everything to UTC or to use only UTC[1].

The second reason why that would not be a good idea is that we can not guarantee that a DateTimeImmutable object returned by `ClockInterface:now()` is actually with timezone UTC.

And even if so: 12:00:00 UTC, 14:00:00+02:00 and 10:00:00-02:00 are all different expressions of the same point in time. And `DateTimeImmutable::now()` returns something that describes a point in time. If the busines-logic needs that point in time also in a specific timezone, then it is the task of the business-logic to ensure that.

Cheers

Andreas

PS:Personal opinion: From what I have seen so far, a lot of the hassle with timezones comes from people trying to do something with it while not understanding it and thereby making it (much) worse... ;-)

[1] https://andreas.heigl.org/2016/12/22/why-not-to-convert-a-datetime-to-timestamp/
--
Woody Gilk
https://www.shadowhand.com



--Larry Garfield

--
You received this message because you are subscribed to the Google Groups
"PHP Framework Interoperability Group" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to php-fig+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/php-fig/f74c10e6-79ea-4113-913c-b79ded8407d3%40www.fastmail.com
.



--
                                                              ,,,
                                                             (o o)
+---------------------------------------------------------ooO-(_)-Ooo-+
| Andreas Heigl                                                       |
| mailto:andr...@heigl.org                  N 50°22'59.5" E 08°23'58" |
| https://andreas.heigl.org                                           |
+---------------------------------------------------------------------+
| https://hei.gl/appointmentwithandreas                               |
+---------------------------------------------------------------------+

--
You received this message because you are subscribed to the Google Groups "PHP 
Framework Interoperability Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to php-fig+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/php-fig/e2e6d0fb-58c3-aae9-d157-56ed530fcce7%40heigl.org.

Attachment: OpenPGP_0xA8D5437ECE724FE5.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to