I've creating a new API for DateTime formats using a system of Moose::Role -s.
These greatly eliminate code redundancy and help consistency. Some of
the advantages:

* We can now support Time from formats in a consistent fashion
* We can now overload any piece of the environment Locale/Timezone in
a specific call to parse_datetime
* We can now ensure builders of Formats provide the same api
(debug/defaults/locale/timezone/pattern) etc.
* We can now ensure consistency in the debugging information across all Formats
* Using MooseX::Types::DateTime we can now coerce to Timezones/Locales
from strings in an intelligent fashion consistently
* We can remove the duplication of Olsen abbreviations -> ambiguous
exception handlers by putting all of the code in one place.
* We can provide the mechanisms necessary to adapt ::Format::* to
Time-specific (dateless DateTime modules) by providing intelligent
defaults, and wrapping the call to DateTime->new with a helper
* We can disable the defaults (setting times to 0, dates to 1)
* We provide the ability to cache Locale/Timezone creation across the board.

Really it boils down to having two subs required, parse_datetime {},
and format_datetime {}, and nothing else.

There are a few more major points I'm probably still missing.

TODO: make work for 5.8, make a DateTimeX::Format::Migration to
further help those that wish to use DateTimeX::Format without any
code-additions (just deletions)

All input is appreciated

-- 
Evan Carroll
System Lord of the Internets

Reply via email to