123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==================================================================== */
-
- package org.apache.poi.hwpf.usermodel;
-
- import java.util.Calendar;
-
- import org.apache.poi.common.Duplicatable;
- import org.apache.poi.util.BitField;
- import org.apache.poi.util.BitFieldFactory;
- import org.apache.poi.util.LittleEndian;
- import org.apache.poi.util.LittleEndianConsts;
- import org.apache.poi.util.LocaleUtil;
- import org.apache.poi.util.Removal;
-
- /**
- * This class is used to represent a date and time in a Word document.
- */
- public final class DateAndTime implements Duplicatable {
- public static final int SIZE = 4;
- 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 static final BitField _months = BitFieldFactory.getInstance(0xf);
- private static final BitField _years = BitFieldFactory.getInstance(0x1ff0);
- // private static final BitField _weekday = BitFieldFactory.getInstance(0xe000);
-
- private short _info;
- private short _info2;
-
- public DateAndTime() {}
-
- public DateAndTime(DateAndTime other) {
- _info = other._info;
- _info2 = other._info2;
- }
-
- public DateAndTime(byte[] buf, int offset) {
- _info = LittleEndian.getShort(buf, offset);
- _info2 = LittleEndian.getShort(buf, offset + LittleEndianConsts.SHORT_SIZE);
- }
-
- public Calendar getDate() {
- // TODO Discover if the timezone is stored somewhere else or not
- return LocaleUtil.getLocaleCalendar(
- _years.getValue(_info2)+1900,
- _months.getValue(_info2)-1,
- _dom.getValue(_info),
- _hours.getValue(_info),
- _minutes.getValue(_info),
- 0
- );
- }
-
- public void serialize(byte[] buf, int offset)
- {
- LittleEndian.putShort(buf, offset, _info);
- LittleEndian.putShort(buf, offset + LittleEndianConsts.SHORT_SIZE, _info2);
- }
-
- @Override
- public boolean equals(Object o)
- {
- if (!(o instanceof DateAndTime)) return false;
- DateAndTime dttm = (DateAndTime)o;
- return _info == dttm._info && _info2 == dttm._info2;
- }
-
- @Override
- public int hashCode() {
- assert false : "hashCode not designed";
- return 42; // any arbitrary constant will do
- }
-
- @Override
- @SuppressWarnings("squid:S2975")
- @Deprecated
- @Removal(version = "5.0.0")
- public DateAndTime clone() {
- return copy();
- }
-
- @Override
- public DateAndTime copy() {
- return new DateAndTime(this);
- }
-
- public boolean isEmpty()
- {
- return _info == 0 && _info2 == 0;
- }
-
- @Override
- public String toString()
- {
- if ( isEmpty() )
- return "[DTTM] EMPTY";
-
- return "[DTTM] " + getDate();
- }
- }
|