Apply patch from bug #48924 - Allow access of the HWPF DateAndTime underlying date values

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@948455 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2010-05-26 14:40:25 +00:00
parent 6666c539da
commit 0df94e6be8
2 changed files with 21 additions and 3 deletions

View File

@ -34,6 +34,7 @@
<changes>
<release version="3.7-SNAPSHOT" date="2010-??-??">
<action dev="POI-DEVELOPERS" type="add">48924 - Allow access of the HWPF DateAndTime underlying date values</action>
<action dev="POI-DEVELOPERS" type="add">48926 - Initial support for the HWPF revision marks authors list</action>
<action dev="POI-DEVELOPERS" type="fix">49160 - Ensure that CTDigSigBlob is included in poi-ooxml jar</action>
<action dev="POI-DEVELOPERS" type="fix">49189 - Detect w:tab and w:cr entries in XWPF paragraphs, even when the XSD is silly and maps them to CTEmpty</action>

View File

@ -17,6 +17,8 @@
package org.apache.poi.hwpf.usermodel;
import java.util.Calendar;
import org.apache.poi.util.BitField;
import org.apache.poi.util.BitFieldFactory;
import org.apache.poi.util.LittleEndian;
@ -29,12 +31,12 @@ import org.apache.poi.util.LittleEndian;
public final class DateAndTime
implements Cloneable
{
public static final int SIZE = 4;
private short _info;
public static final int SIZE = 4;
private short _info;
private static final BitField _minutes = BitFieldFactory.getInstance(0x3f);
private static final BitField _hours = BitFieldFactory.getInstance(0x7c0);
private static final BitField _dom = BitFieldFactory.getInstance(0xf800);
private short _info2;
private short _info2;
private static final BitField _months = BitFieldFactory.getInstance(0xf);
private static final BitField _years = BitFieldFactory.getInstance(0x1ff0);
private static final BitField _weekday = BitFieldFactory.getInstance(0xe000);
@ -49,6 +51,21 @@ public final class DateAndTime
_info2 = LittleEndian.getShort(buf, offset + LittleEndian.SHORT_SIZE);
}
public Calendar getDate() {
// TODO Discover if the timezone is stored somewhere else or not
Calendar cal = Calendar.getInstance();
cal.set(
_years.getValue(_info2)+1900,
_months.getValue(_info2)-1,
_dom.getValue(_info),
_hours.getValue(_info),
_minutes.getValue(_info),
0
);
cal.set(Calendar.MILLISECOND, 0);
return cal;
}
public void serialize(byte[] buf, int offset)
{
LittleEndian.putShort(buf, offset, _info);