On Tuesday 28 September 2004 8:02 am, Mario Ivankovits wrote:
> Steve Cohen wrote:
> >>>>form jui 7
> >>>>rather than
> >>>>7 jui
>
> Steven, we have a problem?
Yes indeed. Thanks! Ouch!
>
> I have tried to parse the date you shown in your ftp-locales test.
>
> SimpleDateFormat sdf = new SimpleDateFormat("MMM dd", new
> Locale("fr", "FR"));
> Date dt = sdf.parse("jui 7");
>
> "jui 7" is not parseable!!!!!!
> java.text.ParseException: Unparseable date: "jui 7"
> at java.text.DateFormat.parse(DateFormat.java:335)
>
> while "juil." (javas short french form) is.
>
> SimpleDateFormat sdf = new SimpleDateFormat("MMM dd", new
> Locale("fr", "FR"));
> Date dt = sdf.parse("juil. 7");
This is what I get for making assumptions in this field (and a strong
cautionary note to those who might still want to try for an automated
auto-detect system.
Noting the strong similarities between "ls" listings and listings from ftp
servers, I assumed that what I see in a unix directory listing created with a
specific unix "LANG" would be the same as what we would see in java, created
with a specific "Locale". Because American unix directory and ftp listings
use the same month abbreviations as those returned by
SimpleDateFormat.getDateFormatSymbols().getShortMonths(), I erroneously
assumed that this must be the case for all LANGs and their equivalent
Locales.
As you so cogently point out, that's not the case! Doh!
Which means, back to the drawing board! Java and its SimpleDateFormats are
not going to help us as much. There is no simple path from a Locale to a
directory listing date format.
So I see two possiblities.
1) Parse the date with a regular expression but make the month names a
settable parameter.
2) Parse the date with a special SimpleDateFormat constructed on the fly:
private SimpleDateFormat createDateFormatter(
String formatString, /* e.g "MMM dd"*/
String monthNames) /* e.g
"jan|fÃv|mar|avr|mai|jun|jui|aoÃ|sep|oct|nov|dÃc"*/
{
sdf = new SimpleDateFormat(formatString);
sdf.getDateFormatSymbols().setShortMonthNames(monthNames.split("|");
/*
yes,I know that String.split() is java 1.4 specific, this is just for
simplicity here. Any actual implementation could not use the split() method.
*/
}
The advantage of 2 is that you still get a Date object after all your pains,
more easily that you do from rolling your own off a regex. And it's easier
to use SimpleDateFormat format strings than regular expressions. Finally,
there is more calendar logic in SimpleDateFormat than in our reqular
expressions. Please note that using our regexes Feb 30 is a legitimate date
in our regex system.
In either case, for the sake of user convenience we might still want to tie
some preset constant month to locales (and possibly system types), even
though java's implementation does not produce the same symbols natively as
unix directory listings do.
>
> ---
> Mario
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]