datestr bug [changeset]

Ben Abbott bpabbott at mac.com
Thu Jul 24 06:28:03 CDT 2008


On Jul 23, 2008, at 8:15 PM, Ben Abbott wrote:

> On Wednesday, July 23, 2008, at 07:46PM, "Rob Mahurin" <rob at utk.edu>  
> wrote:
>> On Jul 23, 2008, at 5:47 PM, John W. Eaton wrote:
>>> On 23-Jul-2008, Rob Mahurin wrote:
>>>
>>> | Hello, bug-octave.
>>> |
>>> | This statement
>>> |
>>> | > str = datestr(day, "yyyy-mm-dd\ndddd\n");
>>> | > printf(str);
>>> |
>>> | seems to do some extra substituting:
>>> |
>>> | > 2009-03-14
>>> | > SaturSay
>>> |
>>> | > 2008-11-26
>>> | > WeWnesWay
>>> |
>>> |
>>> | I'm running 3.0.1
>>>
>>> I think this has been reported at least once before.  See for  
>>> example
>>>
>>>  http://www.nabble.com/datestr-weekday-strptime%2C-2-bugs--
>>> to7650360.html#a7650360
>>>
>>> I'm not sure what the best fix is.  I would consider a patch.
>>
>> It seems like the offending line is
>>
>>> str = strrep (str, "d", names_d{weekday (datenum (v(i,1), v(i,2), v
>>> (i,3)))});
>>
>>
>> in datestr.m, which appears after the "dddd" in-place substitution.
>> A possibly-good-enough patch would be to follow this with
>>
>>> # incomplete fix for greedy matching
>>> str = strrep (str, "SunSay", "Sunday");
>>> str = strrep (str, "MonMay", "Monday");
>>> ...
>>
>>
>> I think the "most correct" way to do this would be a set of regular
>> expressions to identify the location and type of each format
>> specifier, followed by a single-pass substitution.
>>
>> If there were a utility function with the right magic numbers in it I
>> could use strftime, which has more robust formatting anyway.  This:
>>
>>> printf(strftime ("%A %F %H:%M:%S %Z\n", localtime((now - 719529)
>>> *24*3600)))
>>
>>
>> (based on the hint from "help now") seems to go the wrong way from  
>> UTC.
>>
>> Cheers,
>> Rob
>
> Another possible solution (hack) is to replace the offending line with
>
> nd  = strfind (str, "d");
> nd  = setdiff (nd, strfind (str,"day"));
> nd  = setdiff (nd, strfind (str,"dnesday"));
> str(nd) = names_d{weekday (datenum (v(i,1), v(i,2), v(i,3)))};
>
> In either event, an additional test should be added.
>
> %!assert(datestr(testtime+[0 0 3 0 0 0],"dddd"),"Wednesday")
>
> Comments?
>
> Ben

Please consider the attached changeset.

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: changeset-datestr.txt
Url: https://www.cae.wisc.edu/pipermail/bug-octave/attachments/20080724/66a93a77/attachment.txt 
-------------- next part --------------






More information about the Bug-octave mailing list