I noticed that DateTime::Format::Strptime defaults to returning
DateTimes in the UTC time zone.  Eg,

    DateTime::Format::Strptime->new(pattern => '%Y%m%d%H%M%S')
        ->parse_datetime('20041102000000')
        ->time_zone->name
    ==> 'UTC'

This is at odds with DateTime, which defaults to floating.  This caused
a mysterious inconsistency in my code.

I think it would be right to change this to floating.  I also found the
use of the time zone given to the parser object confusing.  I think the
following is a clearer documentation of the current code:

--- lib/DateTime/Format/Strptime.pm.orig        2004-11-02 14:56:37.000000000 -0800
+++ lib/DateTime/Format/Strptime.pm     2004-11-02 14:56:40.000000000 -0800
@@ -859,12 +859,13 @@
 
 =item * new( pattern=>$strptime_pattern )
 
-Creates the format object. You must specify a pattern, you can also
-specify a C<time_zone> and a C<locale>. If you specify a time zone
-then any resulting C<DateTime> object will be in that time zone. If you
-do not specify a C<time_zone> parameter, but there is a time zone in the
-string you pass to C<parse_datetime>, then the resulting C<DateTime> will
-use that time zone.
+Creates the format object. You must specify a pattern, and may also
+specify a C<time_zone> and a C<locale>. If you specify a time zone, it
+will be used as the default time zone if none is found by parsing, and
+the resulting C<DateTime> object will be converted to that time zone. If
+you do not specify a time zone, 'UTC' will be used as the default time
+zone, and the resulting C<DateTime> object will remain in the time zone
+found by parsing.
 
 You can optionally use an on_error parameter. This parameter has three
 valid options:

Change 'UTC' to 'floating' if you take my suggestion.

Andrew

Reply via email to