Le 29/01/2014 19:38, manfred.ha...@googlemail.com a écrit :


Hi,

I noticed that jOpenDocument 1.3 seems to store time values in an incorrect 
format.
For example, consider:
     SpreadSheet spreadSheet = SpreadSheet.create(1, 1, 1);
     Sheet sheet = spreadSheet.getFirstSheet();
     sheet.getCellAt(0, 0).setValue(
        Calendar.getInstance(),
        ODValueType.TIME,
        true,
        true
       );
     spreadSheet.saveAs(new File("TimeValueTest.ods"));
The problem is due to    org.jopendocument.dom.ODValueType.format(Object)returning    
TimeUtils.timePartToDuration(cal).toString()that finally produces something like    <table:table-cell 
office:value-type="time" office:time-value="P0Y0M0DT20H42M31.234S">
       <text:p>8:42:31 PM</text:p>
     </table:table-cell>, which LibreOffice in turn interpretes as "12:00:00 
AM".
[I'm using version 3.5.7.2, Build ID: 350m1(Build:2).]
According to 
http://books.evc-cit.info/odbook/ch05.html#table-number-cells-section, an 
office:time-value should be stored in the form PThhHmmMss,ffffS (where ffff is 
the fractional part of a second).

According to the standard, it should handle 0 (and even non zero by the way)
see https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office
and http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#duration

Replacing    return TimeUtils.timePartToDuration(cal).toString()in    
org.jopendocument.dom.ODValueType.format(Object)with    Duration duration = 
TimeUtils.timePartToDuration(cal);
     double seconds = 
duration.getField(DatatypeConstants.SECONDS).doubleValue();
     return String.format("PT%02dH%02dM%07.4fS", duration.getHours(), duration.getMinutes(), 
seconds);gives    <table:table-cell office:value-type="time" 
office:time-value="PT20H42M31.2340S">
       <text:p>8:42:31 PM</text:p>
     </table:table-cell>, which seems to work correctly.

You can't just truncate durations, some other parts of LibreOffice (like user fields in meta.xml) do support the full syntax of durations.

You should file a bug in LibreOffice to ask for the full support of duration in 
cells.
In the mean time, I added a work around in MutableCell, controlled with setTimeValueMode(). This will be available in the next release.

Cheers,
Sylvain

--

--- You received this message because you are subscribed to the Google Groups "jOpenDocument" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jopendocument+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to