The time_zone function in DateTime::Format::Strptime is only called with parse_datetime. I think a nice feature would be to also set the time_zone when calling format_datetime.
I have my own subclass which does this now, but find myself using this more and more in a lot of different projects. I thought it may be useful to have this same functionality in the main module. Here's why: I store dates and datetimes in UTC. I do all date math, queries, sorting, etc, using UTC. All uses are associated with a time_zone. When a user logs in their time_zone is pulled and any display that has a datetime is formatted so it reflects their timezone setting. Basically I have a subclass of DateTime::Format::Strptime that takes one more parameter; a boolean that if true will format the datetime object with what is returned from time_zone. Example: use strict; use DateTime; my $datetime = DateTime->now; # Defaults to UTC my $format_string = '%m/%d/%Y %T'; my $user_timezone = 'America/New_York'; my $Strp = new My::DateTime::Format::Strptime( pattern => $format_string, time_zone => $user_timezone, format_with_time_zone => 1, ); print $Strp->format_datetime($datetime); # Converts from UTC to the User's time_zone package My::DateTime::Format::Strptime; use base 'DateTime::Format::Strptime'; sub new { my $class = shift; my %args = @_; my $format_with_time_zone = delete $args{format_with_time_zone}; my $self = $class->SUPER::new(%args); $self->{__format_with_time_zone} = $format_with_time_zone; bless $self, $class; } sub format_datetime { my ( $self, $dt ) = @_; my $format_me = $self->{__format_with_time_zone} ? $dt->clone->set_time_zone($self->time_zone) : $dt; $self->SUPER::format_datetime($format_me); } 1; Thanks, Kevin