diff options
author | James Ahlborn <jtahlborn@yahoo.com> | 2015-11-25 02:54:41 +0000 |
---|---|---|
committer | James Ahlborn <jtahlborn@yahoo.com> | 2015-11-25 02:54:41 +0000 |
commit | b7fd6e39bbc4750dbea215d3de5cf145a9937bed (patch) | |
tree | 18b5d68018f28aacb45eb964369ca32dfd63ee5f /src/main | |
parent | 6f8cb2c02734e48abcd1ce1a7f834be14ef73b32 (diff) | |
download | jackcess-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.java | 28 | ||||
-rw-r--r-- | src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java | 7 |
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; } |