diff options
author | Andreas Beeker <kiwiwings@apache.org> | 2015-09-09 00:41:03 +0000 |
---|---|---|
committer | Andreas Beeker <kiwiwings@apache.org> | 2015-09-09 00:41:03 +0000 |
commit | 1a0365739ffe41bdbd7faa6fd1b81e7460d01eed (patch) | |
tree | 60393dc83755c67c897849e11ed0eea6eba6109d /src | |
parent | 0a396d589c8ce4a59e65b572f0c5238979b30a26 (diff) | |
download | poi-1a0365739ffe41bdbd7faa6fd1b81e7460d01eed.tar.gz poi-1a0365739ffe41bdbd7faa6fd1b81e7460d01eed.zip |
forbidden apis fixes - a few DateFormat clean ups ...
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1701888 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
13 files changed, 49 insertions, 42 deletions
diff --git a/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java b/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java index 41f90fbfcc..ce8cbf1b12 100644 --- a/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java +++ b/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java @@ -20,7 +20,6 @@ package org.apache.poi.hssf.usermodel; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.Locale; import java.util.regex.Pattern; import org.apache.poi.hssf.model.HSSFFormulaParser; @@ -32,6 +31,7 @@ import org.apache.poi.ss.formula.ptg.NumberPtg; import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.formula.ptg.StringPtg; import org.apache.poi.ss.usermodel.DataValidationConstraint; +import org.apache.poi.util.LocaleUtil; /** * Data Validation Constraint @@ -180,7 +180,11 @@ public class DVConstraint implements DataValidationConstraint { throw new IllegalArgumentException("expr1 must be supplied"); } OperatorType.validateSecondArg(comparisonOperator, expr2); - SimpleDateFormat df = dateFormat == null ? null : new SimpleDateFormat(dateFormat, Locale.ROOT); + SimpleDateFormat df = null; + if (dateFormat != null) { + df = new SimpleDateFormat(dateFormat, LocaleUtil.getUserLocale()); + df.setTimeZone(LocaleUtil.getUserTimeZone()); + } // formula1 and value1 are mutually exclusive String formula1 = getFormulaFromTextExpression(expr1); @@ -392,7 +396,8 @@ public class DVConstraint implements DataValidationConstraint { return new FormulaPair(formula1, formula2); } - private Ptg[] createListFormula(HSSFSheet sheet) { + @SuppressWarnings("resource") + private Ptg[] createListFormula(HSSFSheet sheet) { if (_explicitListValues == null) { HSSFWorkbook wb = sheet.getWorkbook(); @@ -417,6 +422,7 @@ public class DVConstraint implements DataValidationConstraint { * @return The parsed token array representing the formula or value specified. * Empty array if both formula and value are <code>null</code> */ + @SuppressWarnings("resource") private static Ptg[] convertDoubleFormula(String formula, Double value, HSSFSheet sheet) { if (formula == null) { if (value == null) { diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java index 8fbdd12766..33a5ce6aaf 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java @@ -17,7 +17,6 @@ package org.apache.poi.hssf.usermodel; -import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; @@ -53,8 +52,6 @@ import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellReference; import org.apache.poi.ss.util.NumberToTextConverter; import org.apache.poi.util.LocaleUtil; -import org.apache.poi.util.POILogFactory; -import org.apache.poi.util.POILogger; /** * High level representation of a cell in a row of a spreadsheet. @@ -69,8 +66,6 @@ import org.apache.poi.util.POILogger; * <p> */ public class HSSFCell implements Cell { - private static POILogger log = POILogFactory.getLogger(HSSFCell.class); - private static final String FILE_FORMAT_NAME = "BIFF8"; /** * The maximum number of columns in BIFF8 @@ -990,7 +985,8 @@ public class HSSFCell implements Cell { case CELL_TYPE_NUMERIC: //TODO apply the dataformat for this cell if (HSSFDateUtil.isCellDateFormatted(this)) { - DateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", LocaleUtil.getUserLocale()); + SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", LocaleUtil.getUserLocale()); + sdf.setTimeZone(LocaleUtil.getUserTimeZone()); return sdf.format(getDateCellValue()); } return String.valueOf(getNumericCellValue()); diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFDataFormatter.java b/src/java/org/apache/poi/hssf/usermodel/HSSFDataFormatter.java index 13abd91e6d..ef3eb93154 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFDataFormatter.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFDataFormatter.java @@ -19,7 +19,6 @@ package org.apache.poi.hssf.usermodel; import java.text.DecimalFormat; import java.text.Format; -import java.text.SimpleDateFormat; import java.util.Locale; import org.apache.poi.ss.usermodel.DataFormatter; @@ -33,7 +32,7 @@ import org.apache.poi.util.LocaleUtil; * codes, etc. * <p> * Internally, formats will be implemented using subclasses of {@link Format} - * such as {@link DecimalFormat} and {@link SimpleDateFormat}. Therefore the + * such as {@link DecimalFormat} and {@link java.text.SimpleDateFormat}. Therefore the * formats used by this class must obey the same pattern rules as these Format * subclasses. This means that only legal number pattern characters ("0", "#", * ".", "," etc.) may appear in number formats. Other characters can be diff --git a/src/java/org/apache/poi/ss/format/CellDateFormatter.java b/src/java/org/apache/poi/ss/format/CellDateFormatter.java index 4027d02765..11c567c4c9 100644 --- a/src/java/org/apache/poi/ss/format/CellDateFormatter.java +++ b/src/java/org/apache/poi/ss/format/CellDateFormatter.java @@ -38,17 +38,11 @@ public class CellDateFormatter extends CellFormatter { private final DateFormat dateFmt; private String sFmt; - private final long EXCEL_EPOCH_TIME; - private final Date EXCEL_EPOCH_DATE; + private final Calendar EXCEL_EPOCH_CAL = + LocaleUtil.getLocaleCalendar(1904, 0, 1); private static /* final */ CellDateFormatter SIMPLE_DATE = null; - { - Calendar c = LocaleUtil.getLocaleCalendar(1904, 0, 1, 0, 0, 0); - EXCEL_EPOCH_DATE = c.getTime(); - EXCEL_EPOCH_TIME = c.getTimeInMillis(); - } - private class DatePartHandler implements CellFormatPart.PartHandler { private int mStart = -1; private int mLen; @@ -153,6 +147,7 @@ public class CellDateFormatter extends CellFormatter { // See https://issues.apache.org/bugzilla/show_bug.cgi?id=53369 String ptrn = descBuf.toString().replaceAll("((y)(?!y))(?<!yy)", "yy"); dateFmt = new SimpleDateFormat(ptrn, LocaleUtil.getUserLocale()); + dateFmt.setTimeZone(LocaleUtil.getUserTimeZone()); } /** {@inheritDoc} */ @@ -161,15 +156,18 @@ public class CellDateFormatter extends CellFormatter { value = 0.0; if (value instanceof Number) { Number num = (Number) value; - double v = num.doubleValue(); - if (v == 0.0) - value = EXCEL_EPOCH_DATE; - else - value = new Date((long) (EXCEL_EPOCH_TIME + v)); + long v = num.longValue(); + if (v == 0L) { + value = EXCEL_EPOCH_CAL.getTime(); + } else { + Calendar c = (Calendar)EXCEL_EPOCH_CAL.clone(); + c.add(Calendar.SECOND, (int)(v / 1000)); + c.add(Calendar.MILLISECOND, (int)(v % 1000)); + value = c.getTime(); + } } - AttributedCharacterIterator it = dateFmt.formatToCharacterIterator( - value); + AttributedCharacterIterator it = dateFmt.formatToCharacterIterator(value); boolean doneAm = false; boolean doneMillis = false; @@ -219,7 +217,7 @@ public class CellDateFormatter extends CellFormatter { */ public void simpleValue(StringBuffer toAppendTo, Object value) { synchronized (CellDateFormatter.class) { - if (SIMPLE_DATE == null || !SIMPLE_DATE.EXCEL_EPOCH_DATE.equals(EXCEL_EPOCH_DATE)) { + if (SIMPLE_DATE == null || !SIMPLE_DATE.EXCEL_EPOCH_CAL.equals(EXCEL_EPOCH_CAL)) { SIMPLE_DATE = new CellDateFormatter("mm/d/y"); } } diff --git a/src/java/org/apache/poi/ss/usermodel/DataFormatter.java b/src/java/org/apache/poi/ss/usermodel/DataFormatter.java index cecfd10720..b5bf2a8079 100644 --- a/src/java/org/apache/poi/ss/usermodel/DataFormatter.java +++ b/src/java/org/apache/poi/ss/usermodel/DataFormatter.java @@ -28,7 +28,6 @@ import java.text.DecimalFormatSymbols; import java.text.FieldPosition; import java.text.Format; import java.text.ParsePosition; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -53,7 +52,7 @@ import org.apache.poi.util.LocaleUtil; * codes, etc. * <p> * Internally, formats will be implemented using subclasses of {@link Format} - * such as {@link DecimalFormat} and {@link SimpleDateFormat}. Therefore the + * such as {@link DecimalFormat} and {@link java.text.SimpleDateFormat}. Therefore the * formats used by this class must obey the same pattern rules as these Format * subclasses. This means that only legal number pattern characters ("0", "#", * ".", "," etc.) may appear in number formats. Other characters can be diff --git a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java index ab3aa070e7..8ba8bf2395 100644 --- a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java +++ b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java @@ -58,6 +58,7 @@ import org.apache.poi.openxml4j.opc.PackagingURIHelper; import org.apache.poi.openxml4j.opc.TargetMode;
import org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService;
import org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService.RelationshipTransformParameterSpec;
+import org.apache.poi.util.LocaleUtil;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
import org.openxmlformats.schemas.xpackage.x2006.digitalSignature.CTSignatureTime;
@@ -198,7 +199,7 @@ public class OOXMLSignatureFacet extends SignatureFacet { * SignatureTime
*/
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ROOT);
- fmt.setTimeZone(TimeZone.getTimeZone("UTC"));
+ fmt.setTimeZone(LocaleUtil.TIMEZONE_UTC);
String nowStr = fmt.format(signatureConfig.getExecutionTime());
LOG.log(POILogger.DEBUG, "now: " + nowStr);
diff --git a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java index b553602003..f6ad11f1eb 100644 --- a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java +++ b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java @@ -45,6 +45,7 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.util.DocumentHelper; +import org.apache.poi.util.LocaleUtil; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFMap; import org.apache.poi.xssf.usermodel.XSSFRow; @@ -316,6 +317,7 @@ public class XSSFExportToXml implements Comparator<String>{ private String getFormattedDate(XSSFCell cell) { DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.ROOT); + sdf.setTimeZone(LocaleUtil.getUserTimeZone()); return sdf.format(cell.getDateCellValue()); } diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java index e88667f47e..3e6dbc5432 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java @@ -523,6 +523,7 @@ public class SXSSFCell implements Cell { * <code>workbook.getCellStyleAt(0)</code> * @see org.apache.poi.ss.usermodel.Workbook#getCellStyleAt(short) */ + @SuppressWarnings("resource") public CellStyle getCellStyle() { if(_style == null){ @@ -655,6 +656,7 @@ public class SXSSFCell implements Cell { case CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(this)) { DateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", LocaleUtil.getUserLocale()); + sdf.setTimeZone(LocaleUtil.getUserTimeZone()); return sdf.format(getDateCellValue()); } return getNumericCellValue() + ""; diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java index 0e2c9c5495..06dec8da55 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java @@ -21,7 +21,6 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; -import java.util.Locale; import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.formula.FormulaParser; @@ -42,6 +41,7 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellReference; import org.apache.poi.util.Internal; +import org.apache.poi.util.LocaleUtil; import org.apache.poi.xssf.model.SharedStringsTable; import org.apache.poi.xssf.model.StylesTable; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCell; @@ -452,6 +452,7 @@ public final class XSSFCell implements Cell { cellFormula.setRef(range.formatAsString()); } + @SuppressWarnings("resource") private void setFormula(String formula, int formulaType) { XSSFWorkbook wb = _row.getSheet().getWorkbook(); if (formula == null) { @@ -841,7 +842,8 @@ public final class XSSFCell implements Cell { return getCellFormula(); case CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(this)) { - DateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.ROOT); + DateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", LocaleUtil.getUserLocale()); + sdf.setTimeZone(LocaleUtil.getUserTimeZone()); return sdf.format(getDateCellValue()); } return Double.toString(getNumericCellValue()); diff --git a/src/scratchpad/testcases/org/apache/poi/hmef/TestAttachments.java b/src/scratchpad/testcases/org/apache/poi/hmef/TestAttachments.java index 18ccde4df1..18f59725bb 100644 --- a/src/scratchpad/testcases/org/apache/poi/hmef/TestAttachments.java +++ b/src/scratchpad/testcases/org/apache/poi/hmef/TestAttachments.java @@ -20,7 +20,8 @@ package org.apache.poi.hmef; import java.text.DateFormat; import java.util.List; import java.util.Locale; -import java.util.TimeZone; + +import org.apache.poi.util.LocaleUtil; public final class TestAttachments extends HMEFTest { private HMEFMessage quick; @@ -85,7 +86,7 @@ public final class TestAttachments extends HMEFTest { DateFormat fmt = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.UK ); - fmt.setTimeZone(TimeZone.getTimeZone("UTC")); + fmt.setTimeZone(LocaleUtil.TIMEZONE_UTC); // They should all have the same date on them assertEquals("28-Apr-2010 12:40:56", fmt.format( attachments.get(0).getModifiedDate())); diff --git a/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestMAPIAttributes.java b/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestMAPIAttributes.java index c3707a8118..2178e6a760 100644 --- a/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestMAPIAttributes.java +++ b/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestMAPIAttributes.java @@ -21,14 +21,14 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.text.DateFormat; import java.util.Locale; -import java.util.TimeZone; - -import junit.framework.TestCase; import org.apache.poi.POIDataSamples; import org.apache.poi.hmef.HMEFMessage; import org.apache.poi.hsmf.datatypes.MAPIProperty; import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.LocaleUtil; + +import junit.framework.TestCase; public final class TestMAPIAttributes extends TestCase { private static final POIDataSamples _samples = POIDataSamples.getHMEFInstance(); @@ -161,7 +161,7 @@ public final class TestMAPIAttributes extends TestCase { DateFormat fmt = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.UK ); - fmt.setTimeZone(TimeZone.getTimeZone("UTC")); + fmt.setTimeZone(LocaleUtil.TIMEZONE_UTC); assertEquals("15-Dec-2010 14:46:31", fmt.format(date.getDate())); // RTF diff --git a/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestTNEFAttributes.java b/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestTNEFAttributes.java index fcea77f02f..cd13b94b39 100644 --- a/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestTNEFAttributes.java +++ b/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestTNEFAttributes.java @@ -20,15 +20,15 @@ package org.apache.poi.hmef.attribute; import java.io.ByteArrayInputStream; import java.text.DateFormat; import java.util.Locale; -import java.util.TimeZone; - -import junit.framework.TestCase; import org.apache.poi.POIDataSamples; import org.apache.poi.hmef.Attachment; import org.apache.poi.hmef.HMEFMessage; import org.apache.poi.hsmf.datatypes.MAPIProperty; import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.LocaleUtil; + +import junit.framework.TestCase; public final class TestTNEFAttributes extends TestCase { private static final POIDataSamples _samples = POIDataSamples.getHMEFInstance(); @@ -162,7 +162,7 @@ public final class TestTNEFAttributes extends TestCase { DateFormat fmt = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.UK ); - fmt.setTimeZone(TimeZone.getTimeZone("UTC")); + fmt.setTimeZone(LocaleUtil.TIMEZONE_UTC); assertEquals("28-Apr-2010 12:40:56", fmt.format(date.getDate())); } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormatter.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormatter.java index 4abffc5ce3..3b2588f075 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormatter.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormatter.java @@ -241,6 +241,7 @@ public final class TestHSSFDataFormatter { String monthPtrn = fmt.indexOf("mmmm") != -1 ? "MMMM" : "MMM"; // this line is intended to compute how "July" would look like in the current locale SimpleDateFormat sdf = new SimpleDateFormat(monthPtrn, LocaleUtil.getUserLocale()); + sdf.setTimeZone(LocaleUtil.getUserTimeZone()); Calendar calDef = LocaleUtil.getLocaleCalendar(2010, 6, 15, 0, 0, 0); String jul = sdf.format(calDef.getTime()); // special case for MMMMM = 1st letter of month name |