move datetime extensions to their own module
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/718a820a Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/718a820a Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/718a820a Branch: refs/heads/GROOVY_2_6_X Commit: 718a820a29455ddadf3603bec52c91edb095b42f Parents: 48b41ca Author: paulk <[email protected]> Authored: Thu Mar 22 00:41:01 2018 +1000 Committer: paulk <[email protected]> Committed: Thu Mar 22 00:44:00 2018 +1000 ---------------------------------------------------------------------- build.gradle | 1 + gradle/binarycompatibility.gradle | 2 +- gradle/docs.gradle | 5 +- gradle/pomconfigurer.gradle | 3 + settings.gradle | 9 +- .../groovy/runtime/DateGroovyMethods.java | 870 +------ .../groovy/runtime/DateTimeGroovyMethods.java | 2030 --------------- .../groovy/runtime/DefaultGroovyMethods.java | 7 +- .../runtime/DefaultGroovyStaticMethods.java | 204 -- src/spec/doc/core-gdk.adoc | 4 +- src/spec/doc/working-with-datetime-types.adoc | 341 --- .../gdk/WorkingWithDateTimeTypesTest.groovy | 222 -- src/test/groovy/DateTest.groovy | 79 - src/test/groovy/DateTimeTest.groovy | 821 ------ .../groovy/runtime/DateGroovyMethodsTest.java | 116 - .../codehaus/groovy/runtime/DateGDKTest.groovy | 275 -- subprojects/groovy-datetime/build.gradle | 29 + .../datetime/extensions/DateTimeExtensions.java | 2419 ++++++++++++++++++ .../extensions/DateTimeStaticExtensions.java | 250 ++ .../spec/doc/working-with-datetime-types.adoc | 338 +++ .../gdk/WorkingWithDateTimeTypesTest.groovy | 253 ++ .../src/test/java/groovy/DateTimeTest.groovy | 851 ++++++ .../extensions/DateTimeExtensionsTest.java | 94 + subprojects/groovy-dateutil/build.gradle | 28 + .../dateutil/extensions/DateUtilExtensions.java | 778 ++++++ .../spec/doc/working-with-dateutil-types.adoc | 54 + .../gdk/WorkingWithDateUtilTypesTest.groovy | 81 + .../src/test/java/groovy/DateTest.groovy | 327 +++ .../extensions/DateUtilExtensionsTest.java | 64 + subprojects/groovy-json/build.gradle | 1 + 30 files changed, 5632 insertions(+), 4924 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/718a820a/build.gradle ---------------------------------------------------------------------- diff --git a/build.gradle b/build.gradle index 703fd1b..368e791 100644 --- a/build.gradle +++ b/build.gradle @@ -258,6 +258,7 @@ dependencies { antlr2 "org.apache.ant:ant-antlr:$antVersion" testCompile project(':groovy-ant') + testCompile project(':groovy-dateutil') testCompile project(':groovy-test') testCompile project(':groovy-macro') } http://git-wip-us.apache.org/repos/asf/groovy/blob/718a820a/gradle/binarycompatibility.gradle ---------------------------------------------------------------------- diff --git a/gradle/binarycompatibility.gradle b/gradle/binarycompatibility.gradle index 3dfdbdd..0b6e04f 100644 --- a/gradle/binarycompatibility.gradle +++ b/gradle/binarycompatibility.gradle @@ -35,7 +35,7 @@ task checkBinaryCompatibility { check.dependsOn(checkBinaryCompatibility) // for comparing between versions with different modules, set excludeModules to differing modules, e.g. -def excludeModules = ['performance', 'groovy-macro', 'tests-vm8', 'groovy-json-direct'] +def excludeModules = ['groovy-dateutil', 'groovy-datetime', 'performance', 'groovy-macro', 'tests-vm8', 'groovy-json-direct'] //def excludeModules = [] Set projectsToCheck = allprojects.findAll{ !(it.name in excludeModules) } http://git-wip-us.apache.org/repos/asf/groovy/blob/718a820a/gradle/docs.gradle ---------------------------------------------------------------------- diff --git a/gradle/docs.gradle b/gradle/docs.gradle index 9fb0ca7..ac4fc7d 100644 --- a/gradle/docs.gradle +++ b/gradle/docs.gradle @@ -141,8 +141,6 @@ task docGDK { // either package name if in core or fully qualified path otherwise arg(value: 'org.codehaus.groovy.runtime.DefaultGroovyMethods') arg(value: 'org.codehaus.groovy.runtime.DefaultGroovyStaticMethods') - arg(value: 'org.codehaus.groovy.runtime.DateGroovyMethods') - arg(value: 'org.codehaus.groovy.runtime.DateTimeGroovyMethods') arg(value: 'org.codehaus.groovy.runtime.EncodingGroovyMethods') arg(value: 'org.codehaus.groovy.runtime.IOGroovyMethods') arg(value: 'org.codehaus.groovy.runtime.ProcessGroovyMethods') @@ -152,6 +150,9 @@ task docGDK { arg(value: 'org.codehaus.groovy.vmplugin.v5.PluginDefaultGroovyMethods') arg(value: 'org.codehaus.groovy.vmplugin.v8.PluginDefaultGroovyMethods') // TODO don't hard-code these + arg(value: 'subprojects/groovy-dateutil/src/main/java/org/apache/groovy/dateutil/extensions/DateUtilExtensions.java') + arg(value: 'subprojects/groovy-datetime/src/main/java/org/apache/groovy/dateutil/extensions/DateTimeExtensions.java') + arg(value: 'subprojects/groovy-datetime/src/main/java/org/apache/groovy/dateutil/extensions/DateTimeStaticExtensions.java') arg(value: 'subprojects/groovy-sql/src/main/java/org/codehaus/groovy/runtime/SqlGroovyMethods.java') arg(value: 'subprojects/groovy-swing/src/main/java/org/codehaus/groovy/runtime/SwingGroovyMethods.java') arg(value: 'subprojects/groovy-xml/src/main/java/org/codehaus/groovy/runtime/XmlGroovyMethods.java') http://git-wip-us.apache.org/repos/asf/groovy/blob/718a820a/gradle/pomconfigurer.gradle ---------------------------------------------------------------------- diff --git a/gradle/pomconfigurer.gradle b/gradle/pomconfigurer.gradle index 1bbfcc2..1ebe9ed 100644 --- a/gradle/pomconfigurer.gradle +++ b/gradle/pomconfigurer.gradle @@ -609,6 +609,9 @@ project.ext.pomConfigureClosureWithoutTweaks = { contributor { name 'Kent Inge Fagerland Simonsen' } + contributor { + name 'Tom Nichols' + } } mailingLists { mailingList { http://git-wip-us.apache.org/repos/asf/groovy/blob/718a820a/settings.gradle ---------------------------------------------------------------------- diff --git a/settings.gradle b/settings.gradle index 237782d..180ce83 100644 --- a/settings.gradle +++ b/settings.gradle @@ -19,6 +19,8 @@ def subprojects = ['groovy-ant', 'groovy-bsf', 'groovy-console', + 'groovy-datetime', + 'groovy-dateutil', 'groovy-docgenerator', 'groovy-groovydoc', 'groovy-groovysh', @@ -35,13 +37,10 @@ def subprojects = ['groovy-ant', 'tests-vm8', 'groovy-testng', 'groovy-xml', - 'groovy-macro' + 'groovy-macro', + 'performance' ] -if (JavaVersion.current().isJava8Compatible()) { - subprojects << 'performance' -} - if (hasProperty('stressTests')) { subprojects << 'stress' } http://git-wip-us.apache.org/repos/asf/groovy/blob/718a820a/src/main/java/org/codehaus/groovy/runtime/DateGroovyMethods.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/codehaus/groovy/runtime/DateGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DateGroovyMethods.java index 0190b35..f452d13 100644 --- a/src/main/java/org/codehaus/groovy/runtime/DateGroovyMethods.java +++ b/src/main/java/org/codehaus/groovy/runtime/DateGroovyMethods.java @@ -24,87 +24,42 @@ import groovy.lang.GroovyRuntimeException; import java.sql.Timestamp; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.time.*; -import java.util.*; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; +import java.util.TimeZone; /** - * This class defines new groovy methods which appear on normal JDK - * Date and Calendar classes inside the Groovy environment. + * @deprecated use DateUtilExtensions instead */ +@Deprecated public class DateGroovyMethods extends DefaultGroovyMethodsSupport { - /** - * Support the subscript operator for a Date. - * - * @param self a Date - * @param field a Calendar field, e.g. MONTH - * @return the value for the given field, e.g. FEBRUARY - * @see java.util.Calendar - * @since 1.5.5 - */ + @Deprecated public static int getAt(Date self, int field) { Calendar cal = Calendar.getInstance(); cal.setTime(self); return cal.get(field); } - /** - * Convert a Date to a Calendar. - * - * @param self a Date - * @return a Calendar corresponding to the given Date - * @since 1.7.6 - */ + @Deprecated public static Calendar toCalendar(Date self) { Calendar cal = Calendar.getInstance(); cal.setTime(self); return cal; } - /** - * Support the subscript operator for a Calendar. - * - * @param self a Calendar - * @param field a Calendar field, e.g. MONTH - * @return the value for the given field, e.g. FEBRUARY - * @see java.util.Calendar - * @since 1.7.3 - */ + @Deprecated public static int getAt(Calendar self, int field) { return self.get(field); } - /** - * Support the subscript operator for mutating a Calendar. - * Example usage: - * <pre> - * import static java.util.Calendar.* - * def cal = Calendar.instance - * cal[DAY_OF_WEEK] = MONDAY - * cal[MONTH] = MARCH - * println cal.time // A Monday in March - * </pre> - * - * @param self A Calendar - * @param field A Calendar field, e.g. MONTH - * @param value The value for the given field, e.g. FEBRUARY - * @see java.util.Calendar#set(int, int) - * @since 1.7.3 - */ + @Deprecated public static void putAt(Calendar self, int field, int value) { self.set(field, value); } - /** - * Support the subscript operator for mutating a Date. - * - * @param self A Date - * @param field A Calendar field, e.g. MONTH - * @param value The value for the given field, e.g. FEBRUARY - * @see #putAt(java.util.Calendar, int, int) - * @see java.util.Calendar#set(int, int) - * @since 1.7.3 - */ + @Deprecated public static void putAt(Date self, int field, int value) { Calendar cal = Calendar.getInstance(); cal.setTime(self); @@ -112,125 +67,30 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { self.setTime(cal.getTimeInMillis()); } - /** - * Support mutating a Calendar with a Map. - * <p> - * The map values are the normal values provided as the - * second parameter to <code>java.util.Calendar#set(int, int)</code>. - * The keys can either be the normal fields values provided as - * the first parameter to that method or one of the following Strings: - * <table border="1" cellpadding="4"> - * <caption>Calendar index values</caption> - * <tr><td>year</td><td>Calendar.YEAR</td></tr> - * <tr><td>month</td><td>Calendar.MONTH</td></tr> - * <tr><td>date</td><td>Calendar.DATE</td></tr> - * <tr><td>dayOfMonth</td><td>Calendar.DATE</td></tr> - * <tr><td>hourOfDay</td><td>Calendar.HOUR_OF_DAY</td></tr> - * <tr><td>minute</td><td>Calendar.MINUTE</td></tr> - * <tr><td>second</td><td>Calendar.SECOND</td></tr> - * </table> - * Example usage: - * <pre> - * import static java.util.Calendar.* - * def cal = Calendar.instance - * def m = [:] - * m[YEAR] = 2010 - * m[MONTH] = DECEMBER - * m[DATE] = 25 - * cal.set(m) - * println cal.time // Christmas 2010 - * - * cal.set(year:2011, month:DECEMBER, date:25) - * println cal.time // Christmas 2010 - * </pre> - * - * @param self A Calendar - * @param updates A Map of Calendar keys and values - * @see java.util.Calendar#set(int, int) - * @see java.util.Calendar#set(int, int, int, int, int, int) - * @since 1.7.3 - */ + @Deprecated public static void set(Calendar self, Map<Object, Integer> updates) { for (Map.Entry<Object, Integer> entry : updates.entrySet()) { Object key = entry.getKey(); - if (key instanceof String) key = CAL_MAP.get(key); +// if (key instanceof String) key = CAL_MAP.get(key); if (key instanceof Integer) self.set((Integer) key, entry.getValue()); } } - /** - * Legacy alias for copyWith. Will be deprecated and removed in future versions of Groovy. - * - * @see #copyWith(java.util.Calendar, java.util.Map) - * @since 1.7.3 - */ + @Deprecated public static Calendar updated(Calendar self, Map<Object, Integer> updates) { Calendar result = (Calendar) self.clone(); set(result, updates); return result; } - /** - * Support creating a new Date having similar properties to - * an existing Date (which remains unaltered) but with - * some fields updated according to a Map of changes. - * <p> - * Example usage: - * <pre> - * import static java.util.Calendar.YEAR - * def now = Calendar.instance - * def nextYear = now[YEAR] + 1 - * def oneYearFromNow = now.copyWith(year: nextYear) - * println now.time - * println oneYearFromNow.time - * </pre> - * - * @param self A Calendar - * @param updates A Map of Calendar keys and values - * @return The newly created Calendar - * @see java.util.Calendar#set(int, int) - * @see java.util.Calendar#set(int, int, int, int, int, int) - * @see #set(java.util.Calendar, java.util.Map) - * @since 2.2.0 - */ + @Deprecated public static Calendar copyWith(Calendar self, Map<Object, Integer> updates) { Calendar result = (Calendar) self.clone(); set(result, updates); return result; } - /** - * Support mutating a Date with a Map. - * <p> - * The map values are the normal values provided as the - * second parameter to <code>java.util.Calendar#set(int, int)</code>. - * The keys can either be the normal fields values provided as - * the first parameter to that method or one of the following Strings: - * <table border="1" cellpadding="4"> - * <caption>Calendar index values</caption> - * <tr><td>year</td><td>Calendar.YEAR</td></tr> - * <tr><td>month</td><td>Calendar.MONTH</td></tr> - * <tr><td>date</td><td>Calendar.DATE</td></tr> - * <tr><td>dayOfMonth</td><td>Calendar.DATE</td></tr> - * <tr><td>hourOfDay</td><td>Calendar.HOUR_OF_DAY</td></tr> - * <tr><td>minute</td><td>Calendar.MINUTE</td></tr> - * <tr><td>second</td><td>Calendar.SECOND</td></tr> - * </table> - * Example usage: - * <pre> - * import static java.util.Calendar.YEAR - * def date = new Date() - * def nextYear = date[YEAR] + 1 - * date.set(year: nextYear) - * println date - * </pre> - * - * @param self A Date - * @param updates A Map of Calendar keys and values - * @see java.util.Calendar#set(int, int) - * @see #set(java.util.Calendar, java.util.Map) - * @since 1.7.3 - */ + @Deprecated public static void set(Date self, Map<Object, Integer> updates) { Calendar cal = Calendar.getInstance(); cal.setTime(self); @@ -238,12 +98,7 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { self.setTime(cal.getTimeInMillis()); } - /** - * Legacy alias for copyWith. Will be deprecated and removed in future versions of Groovy. - * - * @see #copyWith(java.util.Date, java.util.Map) - * @since 1.7.3 - */ + @Deprecated public static Date updated(Date self, Map<Object, Integer> updates) { Calendar cal = Calendar.getInstance(); cal.setTime(self); @@ -251,29 +106,7 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { return cal.getTime(); } - /** - * Support creating a new Date having similar properties to - * an existing Date (which remains unaltered) but with - * some fields updated according to a Map of changes. - * <p> - * Example usage: - * <pre> - * import static java.util.Calendar.YEAR - * def today = new Date() - * def nextYear = today[YEAR] + 1 - * def oneYearFromNow = today.copyWith(year: nextYear) - * println today - * println oneYearFromNow - * </pre> - * - * @param self A Date - * @param updates A Map of Calendar keys and values - * @return The newly created Date - * @see java.util.Calendar#set(int, int) - * @see #set(java.util.Date, java.util.Map) - * @see #copyWith(java.util.Calendar, java.util.Map) - * @since 2.2.0 - */ + @Deprecated public static Date copyWith(Date self, Map<Object, Integer> updates) { Calendar cal = Calendar.getInstance(); cal.setTime(self); @@ -281,96 +114,41 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { return cal.getTime(); } - private static final Map<String, Integer> CAL_MAP = new HashMap<String, Integer>(); - - static { - CAL_MAP.put("year", Calendar.YEAR); - CAL_MAP.put("month", Calendar.MONTH); - CAL_MAP.put("date", Calendar.DATE); - CAL_MAP.put("dayOfMonth", Calendar.DATE); - CAL_MAP.put("hourOfDay", Calendar.HOUR_OF_DAY); - CAL_MAP.put("minute", Calendar.MINUTE); - CAL_MAP.put("second", Calendar.SECOND); - } - - /** - * Increment a Date by one day. - * - * @param self a Date - * @return the next days date - * @since 1.0 - */ + @Deprecated public static Date next(Date self) { return plus(self, 1); } - /** - * Increment a Calendar by one day. - * - * @param self a Calendar - * @return a new Calendar set to the next day - * @since 1.8.7 - */ + @Deprecated public static Calendar next(Calendar self) { Calendar result = (Calendar) self.clone(); result.add(Calendar.DATE, 1); return result; } - /** - * Decrement a Calendar by one day. - * - * @param self a Calendar - * @return a new Calendar set to the previous day - * @since 1.8.7 - */ + @Deprecated public static Calendar previous(Calendar self) { Calendar result = (Calendar) self.clone(); result.add(Calendar.DATE, -1); return result; } - /** - * Increment a java.sql.Date by one day. - * - * @param self a java.sql.Date - * @return the next days date - * @since 1.0 - */ + @Deprecated public static java.sql.Date next(java.sql.Date self) { return new java.sql.Date(next((Date) self).getTime()); } - /** - * Decrement a Date by one day. - * - * @param self a Date - * @return the previous days date - * @since 1.0 - */ + @Deprecated public static Date previous(Date self) { return minus(self, 1); } - /** - * Decrement a java.sql.Date by one day. - * - * @param self a java.sql.Date - * @return the previous days date - * @since 1.0 - */ + @Deprecated public static java.sql.Date previous(java.sql.Date self) { return new java.sql.Date(previous((Date) self).getTime()); } - /** - * Add a number of days to this date and returns the new date. - * - * @param self a Date - * @param days the number of days to increase - * @return the new date - * @since 1.0 - */ + @Deprecated public static Date plus(Date self, int days) { Calendar calendar = Calendar.getInstance(); calendar.setTime(self); @@ -378,25 +156,12 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { return calendar.getTime(); } - /** - * Add a number of days to this date and returns the new date. - * - * @param self a java.sql.Date - * @param days the number of days to increase - * @return the new date - * @since 1.0 - */ + @Deprecated public static java.sql.Date plus(java.sql.Date self, int days) { return new java.sql.Date(plus((Date) self, days).getTime()); } - /** - * Add number of days to this Timestamp and returns the new Timestamp object. - * - * @param self a Timestamp - * @param days the number of days to increase - * @return the new Timestamp - */ + @Deprecated public static Timestamp plus(Timestamp self, int days) { Calendar calendar = Calendar.getInstance(); calendar.setTime(self); @@ -406,53 +171,22 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { return ts; } - /** - * Subtract a number of days from this date and returns the new date. - * - * @param self a Date - * @param days the number of days to subtract - * @return the new date - * @since 1.0 - */ + @Deprecated public static Date minus(Date self, int days) { return plus(self, -days); } - /** - * Subtract a number of days from this date and returns the new date. - * - * @param self a java.sql.Date - * @param days the number of days to subtract - * @return the new date - * @since 1.0 - */ + @Deprecated public static java.sql.Date minus(java.sql.Date self, int days) { return new java.sql.Date(minus((Date) self, days).getTime()); } - /** - * Subtract a number of days from this Timestamp and returns the new Timestamp object. - * - * @param self a Timestamp - * @param days the number of days to subtract - * @return the new Timestamp - */ + @Deprecated public static Timestamp minus(Timestamp self, int days) { return plus(self, -days); } - /** - * Subtract another date from this one and return the number of days of the difference. - * <p> - * Date self = Date then + (Date self - Date then) - * <p> - * IOW, if self is before then the result is a negative value. - * - * @param self a Calendar - * @param then another Calendar - * @return number of days - * @since 1.6.0 - */ + @Deprecated public static int minus(Calendar self, Calendar then) { Calendar a = self; Calendar b = then; @@ -482,18 +216,7 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { return days; } - /** - * Subtract another Date from this one and return the number of days of the difference. - * <p> - * Date self = Date then + (Date self - Date then) - * <p> - * IOW, if self is before then the result is a negative value. - * - * @param self a Date - * @param then another Date - * @return number of days - * @since 1.6.0 - */ + @Deprecated public static int minus(Date self, Date then) { Calendar a = (Calendar) Calendar.getInstance().clone(); a.setTime(self); @@ -502,118 +225,34 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { return minus(a, b); } - /** - * <p>Create a String representation of this date according to the given - * format pattern. - * <p> - * <p>For example, if the system timezone is GMT, - * <code>new Date(0).format('MM/dd/yy')</code> would return the string - * <code>"01/01/70"</code>. See documentation for {@link java.text.SimpleDateFormat} - * for format pattern use. - * <p> - * <p>Note that a new DateFormat instance is created for every - * invocation of this method (for thread safety). - * - * @param self a Date - * @param format the format pattern to use according to {@link java.text.SimpleDateFormat} - * @return a string representation of this date. - * @see java.text.SimpleDateFormat - * @since 1.5.7 - */ + @Deprecated public static String format(Date self, String format) { return new SimpleDateFormat(format).format(self); } - /** - * <p>Create a String representation of this date according to the given - * format pattern and timezone. - * <p> - * <p>For example: - * <code> - * def d = new Date(0) - * def tz = TimeZone.getTimeZone('GMT') - * println d.format('dd/MMM/yyyy', tz) - * </code> would return the string - * <code>"01/Jan/1970"</code>. See documentation for {@link java.text.SimpleDateFormat} - * for format pattern use. - * <p> - * <p>Note that a new DateFormat instance is created for every - * invocation of this method (for thread safety). - * - * @param self a Date - * @param format the format pattern to use according to {@link java.text.SimpleDateFormat} - * @param tz the TimeZone to use - * @return a string representation of this date. - * @see java.text.SimpleDateFormat - * @since 1.8.3 - */ + @Deprecated public static String format(Date self, String format, TimeZone tz) { SimpleDateFormat sdf = new SimpleDateFormat(format); sdf.setTimeZone(tz); return sdf.format(self); } - /** - * <p>Return a string representation of the 'day' portion of this date - * according to the locale-specific {@link java.text.DateFormat#SHORT} default format. - * For an "en_UK" system locale, this would be <code>dd/MM/yy</code>. - * <p> - * <p>Note that a new DateFormat instance is created for every - * invocation of this method (for thread safety). - * - * @param self a Date - * @return a string representation of this date - * @see java.text.DateFormat#getDateInstance(int) - * @see java.text.DateFormat#SHORT - * @since 1.5.7 - */ + @Deprecated public static String getDateString(Date self) { return DateFormat.getDateInstance(DateFormat.SHORT).format(self); } - /** - * <p>Return a string representation of the time portion of this date - * according to the locale-specific {@link java.text.DateFormat#MEDIUM} default format. - * For an "en_UK" system locale, this would be <code>HH:MM:ss</code>. - * <p> - * <p>Note that a new DateFormat instance is created for every - * invocation of this method (for thread safety). - * - * @param self a Date - * @return a string representing the time portion of this date - * @see java.text.DateFormat#getTimeInstance(int) - * @see java.text.DateFormat#MEDIUM - * @since 1.5.7 - */ + @Deprecated public static String getTimeString(Date self) { return DateFormat.getTimeInstance(DateFormat.MEDIUM).format(self); } - /** - * <p>Return a string representation of the date and time time portion of - * this Date instance, according to the locale-specific format used by - * {@link java.text.DateFormat}. This method uses the {@link java.text.DateFormat#SHORT} - * preset for the day portion and {@link java.text.DateFormat#MEDIUM} for the time - * portion of the output string. - * <p> - * <p>Note that a new DateFormat instance is created for every - * invocation of this method (for thread safety). - * - * @param self a Date - * @return a string representation of this date and time - * @see java.text.DateFormat#getDateTimeInstance(int, int) - * @since 1.5.7 - */ + @Deprecated public static String getDateTimeString(Date self) { return DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(self); } - /** - * Common code for {@link #clearTime(java.util.Calendar)} and {@link #clearTime(java.util.Date)} - * and {@link #clearTime(java.sql.Date)} - * - * @param self a Calendar to adjust - */ + @Deprecated private static void clearTimeCommon(final Calendar self) { self.set(Calendar.HOUR_OF_DAY, 0); self.clear(Calendar.MINUTE); @@ -621,14 +260,7 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { self.clear(Calendar.MILLISECOND); } - /** - * Clears the time portion of this Date instance; useful utility where - * it makes sense to compare month/day/year only portions of a Date. - * - * @param self a Date - * @return the Date but with the time portion cleared - * @since 1.6.7 - */ + @Deprecated public static Date clearTime(final Date self) { Calendar calendar = Calendar.getInstance(); calendar.setTime(self); @@ -637,14 +269,7 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { return self; } - /** - * Clears the time portion of this java.sql.Date instance; useful utility - * where it makes sense to compare month/day/year only portions of a Date. - * - * @param self a java.sql.Date - * @return the java.sql.Date but with the time portion cleared - * @since 1.6.7 - */ + @Deprecated public static java.sql.Date clearTime(final java.sql.Date self) { Calendar calendar = Calendar.getInstance(); calendar.setTime(self); @@ -653,56 +278,20 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { return self; } - /** - * Clears the time portion of this Calendar instance; useful utility - * where it makes sense to compare month/day/year only portions of a Calendar. - * - * @param self a Calendar - * @return the Calendar but with the time portion cleared - * @since 1.6.7 - */ + @Deprecated public static Calendar clearTime(final Calendar self) { clearTimeCommon(self); return self; } - /** - * <p>Shortcut for {@link java.text.SimpleDateFormat} to output a String representation - * of this calendar instance. This method respects the Calendar's assigned - * {@link java.util.TimeZone}, whereas calling <code>cal.time.format('HH:mm:ss')</code> - * would use the system timezone. - * <p>Note that Calendar equivalents of <code>date.getDateString()</code> - * and variants do not exist because those methods are Locale-dependent. - * Although a Calendar may be assigned a {@link java.util.Locale}, that information is - * lost and therefore cannot be used to control the default date/time formats - * provided by these methods. Instead, the system Locale would always be - * used. The alternative is to simply call - * {@link java.text.DateFormat#getDateInstance(int, java.util.Locale)} and pass the same Locale - * that was used for the Calendar. - * - * @param self this calendar - * @param pattern format pattern - * @return String representation of this calendar with the given format. - * @see java.text.DateFormat#setTimeZone(java.util.TimeZone) - * @see java.text.SimpleDateFormat#format(java.util.Date) - * @see #format(java.util.Date, String) - * @since 1.6.0 - */ + @Deprecated public static String format(Calendar self, String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); sdf.setTimeZone(self.getTimeZone()); return sdf.format(self.getTime()); } - /** - * Iterates from this date up to the given date, inclusive, - * incrementing by one day each time. - * - * @param self a Date - * @param to another Date to go up to - * @param closure the closure to call - * @since 2.2 - */ + @Deprecated public static void upto(Date self, Date to, Closure closure) { if (self.compareTo(to) <= 0) { for (Date i = (Date) self.clone(); i.compareTo(to) <= 0; i = next(i)) { @@ -713,15 +302,7 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { ") to upto() cannot be earlier than the value (" + self + ") it's called on."); } - /** - * Iterates from the date represented by this calendar up to the date represented - * by the given calendar, inclusive, incrementing by one day each time. - * - * @param self a Calendar - * @param to another Calendar to go up to - * @param closure the closure to call - * @since 2.2 - */ + @Deprecated public static void upto(Calendar self, Calendar to, Closure closure) { if (self.compareTo(to) <= 0) { for (Calendar i = (Calendar) self.clone(); i.compareTo(to) <= 0; i = next(i)) { @@ -732,15 +313,7 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { ") to upto() cannot be earlier than the value (" + self + ") it's called on."); } - /** - * Iterates from this date down to the given date, inclusive, - * decrementing by one day each time. - * - * @param self a Date - * @param to another Date to go down to - * @param closure the closure to call - * @since 2.2 - */ + @Deprecated public static void downto(Date self, Date to, Closure closure) { if (self.compareTo(to) >= 0) { for (Date i = (Date) self.clone(); i.compareTo(to) >= 0; i = previous(i)) { @@ -751,15 +324,7 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { ") to downto() cannot be later than the value (" + self + ") it's called on."); } - /** - * Iterates from the date represented by this calendar up to the date represented - * by the given calendar, inclusive, incrementing by one day each time. - * - * @param self a Calendar - * @param to another Calendar to go down to - * @param closure the closure to call - * @since 2.2 - */ + @Deprecated public static void downto(Calendar self, Calendar to, Closure closure) { if (self.compareTo(to) >= 0) { for (Calendar i = (Calendar) self.clone(); i.compareTo(to) >= 0; i = previous(i)) { @@ -769,347 +334,4 @@ public class DateGroovyMethods extends DefaultGroovyMethodsSupport { throw new GroovyRuntimeException("The argument (" + to + ") to downto() cannot be later than the value (" + self + ") it's called on."); } - - /** - * Returns the Time Zone offset of the Calendar as a {@link java.time.ZoneOffset}. - * - * @param self a Calendar - * @return a ZoneOffset - * @since 3.0 - */ - public static ZoneOffset getZoneOffset(final Calendar self) { - int offsetMillis = self.get(Calendar.ZONE_OFFSET) + self.get(Calendar.DST_OFFSET); - return ZoneOffset.ofTotalSeconds(offsetMillis / 1000); - } - - /** - * Returns the Time Zone offset of the Date as a {@link java.time.ZoneOffset}, - * which will typically be system's default offset. - * - * @param self a Date - * @return a ZoneOffset - * @since 3.0 - */ - public static ZoneOffset getZoneOffset(final Date self) { - return getZoneOffset(toCalendar(self)); - } - - /** - * Returns the Time Zone of the Calendar as a java.time.ZoneId. - * - * @param self a Calendar - * @return a ZoneId - * @since 3.0 - */ - public static ZoneId getZoneId(final Calendar self) { - return self.getTimeZone().toZoneId(); - } - - /** - * Returns the Time Zone of the Date as a {@link java.time.ZoneId}. This will - * typically be the system's default ZoneId. - * - * @param self a Date - * @return a ZoneId - * @since 3.0 - */ - public static ZoneId getZoneId(final Date self) { - return getZoneId(toCalendar(self)); - } - - /** - * Converts the Calendar to a corresponding {@link java.time.Year}. If the Calendar has a different - * time zone than the system default, the Year will be adjusted into the default time zone. - * - * @param self a Calendar - * @return a Year - * @since 3.0 - */ - public static Year toYear(final Calendar self) { - return Year.of(self.get(Calendar.YEAR)); - } - - /** - * Converts the Date to a corresponding {@link java.time.Year}. - * - * @param self a Date - * @return a Year - * @since 3.0 - */ - public static Year toYear(final Date self) { - return toYear(toCalendar(self)); - } - - /** - * Converts the Calendar to a corresponding {@link java.time.Month}. If the Calendar has a different - * time zone than the system default, the Month will be adjusted into the default time zone. - * - * @param self a Calendar - * @return a Month - * @since 3.0 - */ - public static Month toMonth(final Calendar self) { - return Month.of(self.get(Calendar.MONTH) + 1); - } - - /** - * Converts the Date to a corresponding {@link java.time.Month}. - * - * @param self a Date - * @return a Month - * @since 3.0 - */ - public static Month toMonth(final Date self) { - return toMonth(toCalendar(self)); - } - - /** - * Converts the Calendar to a corresponding {@link java.time.MonthDay}. If the Calendar has a different - * time zone than the system default, the MonthDay will be adjusted into the default time zone. - * - * @param self a Calendar - * @return a MonthDay - * @since 3.0 - */ - public static MonthDay toMonthDay(final Calendar self) { - return MonthDay.of(toMonth(self), self.get(Calendar.DAY_OF_MONTH)); - } - - /** - * Converts the Date to a corresponding {@link java.time.MonthDay}. - * - * @param self a Date - * @return a MonthDay - * @since 3.0 - */ - public static MonthDay toMonthDay(final Date self) { - return toMonthDay(toCalendar(self)); - } - - /** - * Converts the Calendar to a corresponding {@link java.time.YearMonth}. If the Calendar has a different - * time zone than the system default, the YearMonth will be adjusted into the default time zone. - * - * @param self a Calendar - * @return a YearMonth - * @since 3.0 - */ - public static YearMonth toYearMonth(final Calendar self) { - return toYear(self).atMonth(toMonth(self)); - } - - /** - * Converts the Date to a corresponding {@link java.time.YearMonth}. - * - * @param self a Date - * @return a YearMonth - * @since 3.0 - */ - public static YearMonth toYearMonth(final Date self) { - return toYearMonth(toCalendar(self)); - } - - /** - * Converts the Calendar to a corresponding {@link java.time.DayOfWeek}. If the Calendar has a different - * time zone than the system default, the DayOfWeek will be adjusted into the default time zone. - * - * - * @param self a Calendar - * @return a DayOfWeek - * @since 3.0 - */ - public static DayOfWeek toDayOfWeek(final Calendar self) { - return DayOfWeek.of(self.get(Calendar.DAY_OF_WEEK)).minus(1); - } - - /** - * Converts the Date to a corresponding {@link java.time.DayOfWeek}. - * - * @param self a Date - * @return a DayOfWeek - * @since 3.0 - */ - public static DayOfWeek toDayOfWeek(final Date self) { - return toDayOfWeek(toCalendar(self)); - } - - /** - * Converts the Calendar to a corresponding {@link java.time.LocalDate}. If the Calendar has a different - * time zone than the system default, the LocalDate will be adjusted into the default time zone. - * - * @param self a Calendar - * @return a LocalDate - * @since 3.0 - */ - static LocalDate toLocalDate(final Calendar self) { - return LocalDate.of(self.get(Calendar.YEAR), toMonth(self), self.get(Calendar.DAY_OF_MONTH)); - } - - /** - * Converts the Date to a corresponding {@link java.time.LocalDate}. - * - * @param self a Date - * @return a LocalDate - * @since 3.0 - */ - public static LocalDate toLocalDate(final Date self) { - return toLocalDate(toCalendar(self)); - } - - /** - * Converts the Calendar to a corresponding {@link java.time.LocalTime}. If the Calendar has a different - * time zone than the system default, the LocalTime will be adjusted into the default time zone. - * - * @param self a Calendar - * @return a LocalTime - * @since 3.0 - */ - public static LocalTime toLocalTime(final Calendar self) { - int hour = self.get(Calendar.HOUR_OF_DAY); - int minute = self.get(Calendar.MINUTE); - int second = self.get(Calendar.SECOND); - int ns = self.get(Calendar.MILLISECOND) * 1_000_000; - return LocalTime.of(hour, minute, second, ns); - } - - /** - * Converts the Date to a corresponding {@link java.time.LocalTime}. - * - * @param self a Date - * @return a LocalTime - * @since 3.0 - */ - public static LocalTime toLocalTime(final Date self) { - return toLocalTime(toCalendar(self)); - } - - /** - * Converts the Calendar to a corresponding {@link java.time.LocalDateTime}. If the Calendar has a different - * time zone than the system default, the LocalDateTime will be adjusted into the default time zone. - * - * @param self a Calendar - * @return a LocalDateTime - * @since 3.0 - */ - public static LocalDateTime toLocalDateTime(final Calendar self) { - return LocalDateTime.of(toLocalDate(self), toLocalTime(self)); - } - - /** - * Converts the Date to a corresponding {@link java.time.LocalDateTime}. - * - * @param self a Date - * @return a LocalDateTime - * @since 3.0 - */ - public static LocalDateTime toLocalDateTime(final Date self) { - return toLocalDateTime(toCalendar(self)); - } - - /** - * <p>Converts the Calendar to a corresponding {@link java.time.ZonedDateTime}.</p><p>Note that - * {@link java.util.GregorianCalendar} has a {@link java.util.GregorianCalendar#toZonedDateTime} method, - * which is commonly the specific type of Calendar in use.</p> - * - * @param self a Calendar - * @return a ZonedDateTime - * @since 3.0 - */ - public static ZonedDateTime toZonedDateTime(final Calendar self) { - if (self instanceof GregorianCalendar) { // would this branch ever be true? - return ((GregorianCalendar) self).toZonedDateTime(); - } else { - return ZonedDateTime.of(toLocalDateTime(self), getZoneId(self)); - } - } - - /** - * Converts the Date to a corresponding {@link java.time.ZonedDateTime}. - * - * @param self a Date - * @return a ZonedDateTime - * @since 3.0 - */ - public static ZonedDateTime toZonedDateTime(final Date self) { - return toZonedDateTime(toCalendar(self)); - } - - /** - * Converts the Calendar to a corresponding {@link java.time.OffsetDateTime}. - * - * @param self a Calendar - * @return an OffsetDateTime - * @since 3.0 - */ - public static OffsetDateTime toOffsetDateTime(final Calendar self) { - return OffsetDateTime.of(toLocalDateTime(self), getZoneOffset(self)); - } - - /** - * Converts the Date to a corresponding {@link java.time.OffsetDateTime}. - * - * @param self a Date - * @return an OffsetDateTime - * @since 3.0 - */ - public static OffsetDateTime toOffsetDateTime(final Date self) { - return toOffsetDateTime(toCalendar(self)); - } - - /** - * Converts the Calendar to a corresponding {@link java.time.OffsetTime}. - * - * @param self a Calendar - * @return an OffsetTime - * @since 3.0 - */ - public static OffsetTime toOffsetTime(final Calendar self) { - return OffsetTime.of(toLocalTime(self), getZoneOffset(self)); - } - - /** - * Converts the Date to a corresponding {@link java.time.OffsetTime}. - * - * @param self a Date - * @return an OffsetTime - * @since 3.0 - */ - public static OffsetTime toOffsetTime(final Date self) { - return toOffsetTime(toCalendar(self)); - } - - /** - * Convenience method for converting a Calendar to a corresponding {@link java.time.Instant}. - * - * @param self a Calendar - * @return an Instant - * @since 3.0 - */ - public static Instant toInstant(final Calendar self) { - return self.getTime().toInstant(); - } - - /** - * Converts the TimeZone to a corresponding {@link java.time.ZoneOffset}. The offset is determined - * using the current date/time. - * - * @param self a TimeZone - * @return a ZoneOffset - * @since 3.0 - */ - public static ZoneOffset toZoneOffset(final TimeZone self) { - return toZoneOffset(self, Instant.now()); - } - - /** - * Converts this TimeZone to a corresponding {@link java.time.ZoneOffset}. The offset is determined - * using the date/time of specified Instant. - * - * @param self a TimeZone - * @return a ZoneOffset - * @since 3.0 - */ - public static ZoneOffset toZoneOffset(final TimeZone self, Instant instant) { - return self.toZoneId().getRules().getOffset(instant); - } }
