NAME
DateTimeX::Easy - Parse a date/time string using the best method available
VERSION
Version 0.076
SYNOPSIS
# Make DateTimeX object for "now":
my $dt = DateTimeX::Easy->new("today");
# Same thing:
my $dt = DateTimeX::Easy->new("now");
# Uses ::F::Natural's coolness (similar in capability to Date::Manip)
my $dt = DateTimeX::Easy->new("last monday");
# ... but in 1969:
my $dt = DateTimeX::Easy->new("last monday", year => 1969);
# ... at the 100th nanosecond:
my $dt = DateTimeX::Easy->new("last monday", year => 1969, nanosecond => 100);
# ... in US/Eastern: (This will NOT do a timezone conversion)
my $dt = DateTimeX::Easy->new("last monday", year => 1969, nanosecond => 100, timezone => "US/Eastern");
# This WILL do a proper timezone conversion:
my $dt = DateTimeX::Easy->new("last monday", year => 1969, nanosecond => 100, timezone => "US/Pacific");
$dt->set_time_zone("US/Eastern");
DESCRIPTION
DateTimeX::Easy makes DateTime object creation quick and easy. It uses a variety of DateTime::Format packages to do the bulk of the parsing, with some custom tweaks to smooth out the rough edges (mainly concerning timezone detection and selection).
PARSING
Currently, DateTimeX::Easy will attempt to parse input in the following order:
- DateTime - Is the input a DateTime object?
- ICal - Was DT::F::ICal able to parse the input? (Only works if the package is installed)
- DateParse - Was DT::F::DateParse able to parse the input?
-
A caveat, I actually use a modified version of DateParse in order to avoid DateParse's default timezone selection.
- Natural - Was DT::F::Natural able to parse the input?
-
Since this module barfs pretty loudly on strange input, we use a silent $SIG{__WARN__} to hide errors.
- Flexible - Was DT::F::Flexible able to parse the input?
-
This step also looks at the string to see if there is any timezone information at the end.
- DateManip - Was DT::F::DateManip able to parse the input? (Only works if package is installed)
-
DateManip isn't very nice with preserving the input timezone, but it's here as a last resort.
METHODS
DateTimeX::Easy->new( ... )
DateTimeX::Easy->parse( ... )
DateTimeX::Easy->parse_date( ... )
DateTimeX::Easy->parse_datetime( ... )
DateTimeX::Easy->date( ... )
DateTimeX::Easy->datetime( ... )
DateTimeX::Easy->new_date( ... )
DateTimeX::Easy->new_datetime( ... )
Parse the given date/time specification using ::F::Flexible or ::F::Natural and use the result to create a DateTime object. Returns a DateTime object.
You can pass the following in:
parse # The string or DateTime object to parse.
year # A year to override the result of parsing
month # A month to override the result of parsing
day # A day to override the result of parsing
hour # A hour to override the result of parsing
minute # A minute to override the result of parsing
second # A second to override the result of parsing
truncate # A truncation parameter (e.g. year, day, month, week, etc.)
time_zone # - Can be:
timezone # * A timezone (e.g. US/Pacific, UTC, etc.)
tz # * A DateTime special timezone (e.g. floating, local)
#
# - If neither "tz", "timezone", nor "time_zone" is set, then it'll use whatever is parsed.
# - If no timezone is parsed, then the default is floating.
# - If the given timezone is different from the parsed timezone,
# then a time conversion will take place (unless "soft_time_zone_conversion" is set).
# - Either "time_zone", "timezone", "tz" will work (in that order), with "time_zone" having highest precedence
# - See below for examples!
soft_time_zone_conversion # Set this flag to 1 if you don't want the time to change when a given timezone is
# different from a parsed timezone. For example, "10:00 UTC" soft converted to
# PST8PDT would be "10:00 PST8PDT".
time_zone_if_floating # The value of this option should be a valid timezone. If this option is set, then a DateTime object
# with a floating timezone has it's timezone set to the value.
default_time_zone # Same as "time_zone_if_floating"
... and anything else that you want to pass to the DateTime->new constructor
If truncate
is specificied, then DateTime->truncate will be run after object creation.
Furthermore, you can simply pass the value for "parse" as the first positional argument of the DateTimeX::Easy call, e.g.:
# This:
DateTimeX::Easy->new("today", year => 2008, truncate => "hour");
# ... is the same as this:
DateTimeX::Easy->new(parse => "today", year => 2008, truncate => "hour");
Timezone processing can be a little complicated. Here are some examples:
DateTimeX::Easy->parse("today"); # Will use a floating timezone
DateTimeX::Easy->parse("2007-07-01 10:32:10"); # Will ALSO use a floating timezone
DateTimeX::Easy->parse("2007-07-01 10:32:10 US/Eastern"); # Will use US/Eastern as a timezone
DateTimeX::Easy->parse("2007-07-01 10:32:10"); # Will use the floating timezone
DateTimeX::Easy->parse("2007-07-01 10:32:10", time_zone_if_floating => "local"); # Will use the local timezone
DateTimeX::Easy->parse("2007-07-01 10:32:10 UTC", time_zone => "US/Pacific"); # Will convert from UTC to US/Pacific
my $dt = DateTime->now->set_time_zone("US/Eastern");
DateTimeX::Easy->parse($dt); # Will use US/Eastern as the timezone
DateTimeX::Easy->parse($dt, time_zone => "floating"); # Will use a floating timezone
DateTimeX::Easy->parse($dt, time_zone => "US/Pacific", soft_time_zone_conversion => 1);
# Will use US/Pacific as the timezone with NO conversion
# For example, "22:00 US/Eastern" will become "22:00 PST8PDT"
DateTimeX::Easy->parse($dt)->set_time_zone("US/Pacific"); # Will use US/Pacific as the timezone WITH conversion
# For example, "22:00 US/Eastern" will become "19:00 PST8PDT"
DateTimeX::Easy->parse($dt, time_zone => "US/Pacific"); # Will ALSO use US/Pacific as the timezone WITH conversion
EXPORT
parse( ... )
parse_date( ... )
parse_datetime( ... )
date( ... )
datetime( ... )
new_date( ... )
new_datetime( ... )
Same syntax as above. See above for more information.
MOTIVATION
Although I really like using DateTime for date/time handling, I was often frustrated by its inability to parse even the simplest of date/time strings. There does exist a wide variety of DateTime::Format::* modules, but they all have different interfaces and different capabilities. Coming from a Date::Manip background, I wanted something that gave me the power of ParseDate while still returning a DateTime object. Most importantly, I wanted explicit control of the timezone setting at every step of the way. DateTimeX::Easy is the result.
THANKS
Dave Rolsky and crew for writing DateTime
SEE ALSO
DateTime, DateTime::Format::ICal, DateTime::Format::ParseDate, DateTime::Format::Natural, DateTime::Format::Flexible, DateTime::Format::DateManip, Date::Manip
AUTHOR
Robert Krimen, <rkrimen at cpan.org>
BUGS
Please report any bugs or feature requests to bug-datetime-easy at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=DateTimeX-Easy. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc DateTimeX::Easy
You can also look for information at:
RT: CPAN's request tracker
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
COPYRIGHT & LICENSE
Copyright 2007 Robert Krimen, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.