Re: Formatting a date
Alex Twisleton-Wykeham-Fiennes <[email protected]> Mon, 27 Mar 2006 19:01:34 +0100
| Newsgroups | gmane.comp.java.webmacro.user |
|---|---|
| Message-ID | <[email protected]> |
On Mon 27 March 2006 17:36, Keats Kirsch wrote:
> >I'll also look at making $Text.formatDate cache the SimpleTextFormat
> > objects that it creates and run some profiling to see whether or not this
> > is really an advantage...
>
> Yes the formatDate() method was kind of a quick hack. At one point I
> had written a DateTool, but I never got it clean enough to commit to CVS
> (and now I've lost it). Perhaps I'll give it another whack. It's
> actually fairly complicated, given all the different date formats and
> localization etc. It would be nice if the tool could pick up the locale
> from the request, but then it would be Servlet specific. But something
> simple would probably be useful for parsing and formatting dates.
In the meantime, adding something like this to TextTool will help:-
private final static Map __simpleDateFormats = new HashMap();
public static String formatDate (Date date, String format)
{
SimpleDateFormat formatter = null;
synchronized (__simpleDateFormats) {
formatter = (SimpleDateFormat) __simpleDateFormats.get(format);
if (formatter == null) {
formatter = new SimpleDateFormat(format);
__formatters.put(format, formatter);
}
}
return formatter.format(date);
}
I'll run some tests and see if it is worth the added complexity from a
performance viewpoint.
> I'm thinking a factory that would produce date wrappers. E.g.,
>
> #set $dt = $DateFactory.parse("27-Mar-2006", "dd-MMM-yyyy")
> #set $dt.Format.Short = "MM/dd/yyyy"
> #set $dt.Format.Default = "dd-MMM-yyyy"
>
> Default format: $dt ==> 27-Mar-2006
> Short format: $dt.Format.Short ==> 02/27/2006
>
> #set $dt = $dt.addMonths(1)
> New date: $dt ==> 27-Apr-2006
Why not make it so that the wrapper class extends Date so that you can then
also used the wrapped class as a drop-in replacement for Date in other
methods.
Also, why not make the wrapper include a hashtable accessor that enables you
to extend the number of registered formats on it?
e.g.
$DateFactory.registerFormat("Short", "MM-dd-yyyy")
#set $dateWrapper = $DateFactory.parse("27-Mar-2006", "Short")
$dateWrapper.Time --> java.util.Date.getTime()
$dateWrapper.Short --> DateWrapper.get("Short") --> String (by querying
DateFactory for the SimpleDateFormatter registered as "Short" and then
formatting itself using this format)
If I was really looking for flexibility you could also make cascading parsers
which would let you do things like this:-
$DateFactory.registerFormat("Long", "hh:MM:ss MM-dd-yyyy")
$DateFactory.registerFormat("Medium", "hh:MM MM-dd-yyyy")
$DateFactory.registerFormat("Short", "MM-dd-yyyy")
#set $dateWrapper = $DateFactory.parse("22-05-1971")
and it would iterate through the registered formatters in order finding one
that can parse the supplied text...
<snip>
Alex
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642