Sven Barth schrieb:
Am 03.11.2011 02:39, schrieb Hans-Peter Diettrich:
IMO we have to face a problem very similar to Ansi/UTF-8/16: A TDateTime
variable can contain local time in a number of timezones (Ansi), or UTC
values (UTF), which must be interpreted accordingly, e.g. in
DateTimeToStr().

When Delphi compatible Now() provides local time TDateTime (including
DST, as is on Windows), and DateTimeToStr() etc. expect a local time
argument, a full emulation of these functions has to be provided on
other platforms as well.

But even in Delphi the programmer has to keep track whether a TDateTime contains a local or UTC based time value (e.g. if he converted the local time returned by Now to UTC).

Right, just like the user currently must remember whether an AnsiString contains Ansi or UTF-8. But how do you want to get the UTC and put it into a TDateTime?

And functions like DateTimeToStr don't care whether a time value is local or UTC and in my opinion they even MUST NOT.

Splitting the TDateTime into year, month etc. is done by a DecodeDate... function, that *assumes* that TDateTime contains a local time. When you feed it an UTC time, the result is unusable.

If I use such a function I want the value of the given TDateTime printed to a string no matter what timezone I'm currently in.

A TDateTime only contains the number of days since the begin of the epoch (of the encoded date). Which epoch should apply? The time part contains the fraction of the day, based on midnight of which timezone?

DoDi

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to