diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index d1f3899f1..05ed35d26 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 48924 - Allow access of the HWPF DateAndTime underlying date values 48926 - Initial support for the HWPF revision marks authors list 49160 - Ensure that CTDigSigBlob is included in poi-ooxml jar 49189 - Detect w:tab and w:cr entries in XWPF paragraphs, even when the XSD is silly and maps them to CTEmpty diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DateAndTime.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DateAndTime.java index 27626a515..967fc9264 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DateAndTime.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DateAndTime.java @@ -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); @@ -48,6 +50,21 @@ public final class DateAndTime _info = LittleEndian.getShort(buf, offset); _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) {