[Glass] DateAndTime ... all pretty strange

Dale Henrichs via Glass glass at lists.gemtalksystems.com
Fri Jan 13 10:22:54 PST 2017



On 1/11/17 10:32 PM, Marten Feldtmann wrote:
>
> Well, printString and fromString introduce some kind of a date/time 
> representation. Whatever this is, the output should be useable via the 
> parsing method.
>
I am not sure what you mean by this ... if the output of printString for 
DateAndTime cannot be used to produce the same object suing #fromString: 
then I think that it is a bug ...

And the results that you were seeing indicates that there was a bug and 
I gave you a patch to try.

Did you try the patch and if you did, I would appreciate it if you let 
me know ... if you don't let me know, I will not publish the patch ...
>
> If I use printString it looks like ISO8601 and/or RFC3339 - but the 
> corresponding method "fromString" introduces locales and this breaks 
> the whole stuff. And I do not find any "," in the syntax specification 
> of ISO8601 and RFC3339.
>
I guess I'll see if the ANSI standard description describes which format 
they are using, but your guess is probably right and it is good to know 
that a Locale-specific decimal point is not supposed to be used here.
>
> Actually I would NOT like to see a locale introduced there. I prefere 
> method with names showing me, that locales are used by that method 
> (e.g asLocaleC) - then one knows, what to expect.
>
That makes sense ... in this particular case the Locale is  used by the 
printString for ScaledDecimal and the printString code for DateAndTime 
was parsing the printString of the ScaledDecimal expecting a $. instead 
of a Locale-specific decimal point.

Again, I am hoping that you let me know whether or not my proposed patch 
actually fixes the problem.
>
> And I also do not see a need for that large number of digits in the 
> fractional part of the seconds - as I said it may results in problems 
> with other languages (though it is allowed to have so many digits) and 
> the resolution shown here seems to be not true - there seems to be the 
> natural single precision/double conversion precision problem.
>
By default, DateAndTime class>>now uses System class>>_timeGmtFloat 
which returns a Float with up to microsecond resolution.

If you use one of the other DateAndTime factory methods:

   year:day:hour:minute:second:
   year:day:hour:minute:second:offset:
   year:month:day:hour:minute:second:
   year:month:day:hour:minute:second:offset:

The object in the second argument will be used to control how many 
decimal points are displayed by the printString method.

If you are content with 1 second resolution you can use 
#printStringWithRoundedSeconds or printRoundedOn:. Or you can override 
DateAndTimeANSI class>>now and/or send #beRounded to the DateAndTime 
instance before using it ...

If you want to have a specific number of decimal points of resolution 
for seconds, then the best bet is to use a ScaledDecimal for seconds by 
adding and using a #beScaledDecimal: and/or override DateAndTimeANSI 
class>>now.

Again, I am hoping that you let me know whether or not my proposed patch 
actually fixes your original problem.

Dale


More information about the Glass mailing list