> Why then does parse_datetime automatically convert from a string to a > timezone? > Shouldn't it then just always return a datetime in floating context?
It doesn't "convert" it "reads it as". > my $dt = $Strp->parse_datetime($my_string); #Floating Not floating, that is whatever the time_zone you have set in the ::Format module. Or, if the Format module reads in a different time zone from the string as in the case of %z and %Z in strptime. > Not overriding time_zone, just format_datetime if and only if a option is > set. The attribute 'time_zone' seems pretty generic to me, it's not > 'parse_time_zone' or 'time_zone_from_string'. The confusing part is that > it's just named 'time_zone'. I'm not arguing that it is the best name in the world, I'm just saying it is simply the respective constructor argument that well behaved DateTime::Format module will provide under the hood to DateTime. > Actually that would be pretty cool, because I could parse all of my DateTime > strings to UTC and format all my DateTime objects to a desired time_zone > within a single formatter. You can already do this. foreach ( qw/timezone list here/ ) { state $dtf = DateTime::Format::Strptime->new({ time_zone => UTC }); my $dt = $dtf->parse_datetime( $str ); $dt->set_time_zone( $_ ); say "time zone $_"; say $dtf->format_datetime( $dt ); } > Also, why is it practical to do something like the following for parsing > which you appear to be fine with: > > my $Strp = new DateTime::Format::Strptime( > pattern => $user->datetime_pattern, > time_zone => 'America/New_York', > ); > > my $Strp2 = new DateTime::Format::Strptime( > pattern => $user->datetime_pattern, > time_zone => 'America/Chicago', > ); It is not, this is why I created DateTimeX::Format, because I wanted each and every DateTimeX::Format module to support a runtime override for the constructor arguments to DateTimeX::Format modules. So in my world you could just > my $Strp = new DateTimeX::Format::Strptime( > pattern => $user->datetime_pattern, > ); $Strp->parse_datetime( $str, { time_zone => $tz } ); But the difference is I'm not really adding functionality, and nothing is happening under the hood to the DateTime object, just a new value will be supplied to the DateTime constructor. -- Evan Carroll System Lord of the Internets http://www.evancarroll.com