diff --git a/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java b/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java
index 41f90fbfc..ce8cbf1b1 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 null
*/
+ @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 8fbdd1276..33a5ce6aa 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;
*
*/ 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 13abd91e6..ef3eb9315 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. *
* 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 4027d0276..11c567c4c 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))(?
* 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 ab3aa070e..8ba8bf239 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 b55360200..f6ad11f1e 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 Comparatorworkbook.getCellStyleAt(0)
* @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 0e2c9c549..06dec8da5 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 18ccde4df..18f59725b 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 c3707a811..2178e6a76 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 fcea77f02..cd13b94b3 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 4abffc5ce..3b2588f07 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