[ 
https://issues.apache.org/jira/browse/NET-188?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12579253#action_12579253
 ] 

Martin Oberhuber commented on NET-188:
--------------------------------------

I'd suggest that in terms of API, when a programmer knows the exact behavior of 
the server, he should be able to get exact timestamps even if they are short 
and/or in the future. Right now we know that FreeBSD does +-6-month short 
dates; Linux RHEL4 does +0/-6-month short dates.

So what about a new API like
<code>
   FTPClientConfig#setShortDateRange(long msecPast, long msecFuture)
</code>
that specifies in what range of time difference a short date is considered to 
be in the past, or in the future respectively. The Javadoc comment could be 
similar to the #setLenientFutureDates() method.

The old setLenientFutureDates(boolean) method could be deprecated, and 
translated into this:
<code>
if(lenientFutureDates) {
   setShortDateRange(1000L * 86400 * 364, 1000L * 86400);
} else {
   setShortDateRange(1000L * 86400 * 365, 0);
}
</code>

I'm not completely sure what would be the best default value for the new 
settings. Given that lenientFutureDates was false by default, we should 
probably always expect dates in the past only by default. On the other hand, 
given that a "one day in future" date is much more likely due to time zone 
differences than a "365 days in the past" short date, a setting of +1 day / 
-364 days might be a more appropriate default.

As a matter of fact, we cannot ever guarantee correct parsing when the user has 
not specified by API what the setting should be. So the goal of a good default 
setting could either be "avoid invalid dates even if a parse error occurs" (not 
expected by the average user, IMHO, as the Feb.29 case shows); or, "always fall 
back to a reasonable date as it would be read by the user, even if it might be 
incorrect".

Given that the original RFC for FTP says "The output of DIR is designed for 
human readers and might not be machine readable", I think the default should be 
guided by what a human user would expect from the listing. That being said, I 
think that when it's March 15 and I'm reading "March 16" I'd expect a future 
date; reading "March 20" I'd expect a past date; so I'm in favor of a "+1 day / 
-364 days" strategy by default.

Which is, admittedly, breaking the previous behavior which was lenientFuture == 
false meanding a +0 / -365 strategy.

> FTPClient#listFiles returns null element when file's timestamp is "02/29"
> -------------------------------------------------------------------------
>
>                 Key: NET-188
>                 URL: https://issues.apache.org/jira/browse/NET-188
>             Project: Commons Net
>          Issue Type: Bug
>    Affects Versions: 1.4
>            Reporter: HONMA Hirotaka
>         Attachments: commons-net-ftp-date-parser-feb29.patch, 
> DstParseTest.java, FTPTimestampParserLeap.patch, jan01.patch
>
>
> This issue has same cause as VALIDATOR-221.
> org.apache.commons.net.ftp.parser.FTPTimestampParserImpl#parseTimestamp 
> throws ParseException with timestampStr = "Feb 29 11:22".
> FTP Server status:
> {code}
> [EMAIL PROTECTED] test-commonsnet]# pwd
> /tmp/test-commonsnet
> [EMAIL PROTECTED] test-commonsnet]# ls -l
> total 0
> -rw-r--r--  1 root root 0 Dec 19  2006 aaa.txt
> -rw-r--r--  1 root root 0 Feb 29 11:22 bbb.txt
> {code}
> test code:
> {code}
> public void testCommonsNetLeapDay() throws Exception {
>     final FTPClient ftp = new FTPClient();
>     ftp.connect(host);
>     ftp.login(user, password);
>     final FTPFile[] listFiles = ftp.listFiles("/tmp/test-commonsnet");
>     for (int i = 0; i < listFiles.length; i++) {
>         System.out.println("[" + i + "] " + listFiles[i]);
>     }
>     ftp.disconnect();
> }
> {code}
> results bellow.
> {code}
> [0] -rw-r--r--    1 0        0               0 Dec 18  2006 aaa.txt
> [1] null
> {code}
> Second element(bbb.txt) should not be null.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to