aboutsummaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
authorJames Ahlborn <jtahlborn@yahoo.com>2015-11-25 02:54:41 +0000
committerJames Ahlborn <jtahlborn@yahoo.com>2015-11-25 02:54:41 +0000
commitb7fd6e39bbc4750dbea215d3de5cf145a9937bed (patch)
tree18b5d68018f28aacb45eb964369ca32dfd63ee5f /src/main
parent6f8cb2c02734e48abcd1ce1a7f834be14ef73b32 (diff)
downloadjackcess-b7fd6e39bbc4750dbea215d3de5cf145a9937bed.tar.gz
jackcess-b7fd6e39bbc4750dbea215d3de5cf145a9937bed.zip
Add some utility methods for handling Dates in an Access compatible manner. fixes issue #128
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@966 f203690c-595d-4dc9-a70b-905162fa7fd2
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/healthmarketscience/jackcess/DatabaseBuilder.java28
-rw-r--r--src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java7
2 files changed, 32 insertions, 3 deletions
diff --git a/src/main/java/com/healthmarketscience/jackcess/DatabaseBuilder.java b/src/main/java/com/healthmarketscience/jackcess/DatabaseBuilder.java
index aa81855..c5e0252 100644
--- a/src/main/java/com/healthmarketscience/jackcess/DatabaseBuilder.java
+++ b/src/main/java/com/healthmarketscience/jackcess/DatabaseBuilder.java
@@ -20,6 +20,10 @@ import java.io.File;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
@@ -302,4 +306,28 @@ public class DatabaseBuilder
{
return new DatabaseBuilder(mdbFile).setFileFormat(fileFormat).create();
}
+
+ /**
+ * Returns a SimpleDateFormat for the given format string which is
+ * configured with a compatible Calendar instance (see
+ * {@link #toCompatibleCalendar}).
+ */
+ public static SimpleDateFormat createDateFormat(String formatStr) {
+ SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
+ toCompatibleCalendar(sdf.getCalendar());
+ return sdf;
+ }
+
+ /**
+ * Ensures that the given {@link Calendar} is configured to be compatible
+ * with how Access handles dates. Specifically, alters the gregorian change
+ * (the java default gregorian change switches to julian dates for dates pre
+ * 1582-10-15, whereas Access uses <a href="https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar">proleptic gregorian dates</a>).
+ */
+ public static Calendar toCompatibleCalendar(Calendar cal) {
+ if(cal instanceof GregorianCalendar) {
+ ((GregorianCalendar)cal).setGregorianChange(new Date(Long.MIN_VALUE));
+ }
+ return cal;
+ }
}
diff --git a/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java b/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java
index 26a7f1b..1984dc3 100644
--- a/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java
+++ b/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java
@@ -52,6 +52,7 @@ import com.healthmarketscience.jackcess.Cursor;
import com.healthmarketscience.jackcess.CursorBuilder;
import com.healthmarketscience.jackcess.DataType;
import com.healthmarketscience.jackcess.Database;
+import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.IndexBuilder;
import com.healthmarketscience.jackcess.IndexCursor;
import com.healthmarketscience.jackcess.PropertyMap;
@@ -702,10 +703,10 @@ public class DatabaseImpl implements Database
/**
* @usage _advanced_method_
*/
- Calendar getCalendar()
- {
+ Calendar getCalendar() {
if(_calendar == null) {
- _calendar = Calendar.getInstance(_timeZone);
+ _calendar = DatabaseBuilder.toCompatibleCalendar(
+ Calendar.getInstance(_timeZone));
}
return _calendar;
}