From 0df94e6be85a7317d66df5fdc34c33a7e9582272 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 26 May 2010 14:40:25 +0000 Subject: [PATCH] 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 --- src/documentation/content/xdocs/status.xml | 1 + .../poi/hwpf/usermodel/DateAndTime.java | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) 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) {