1 /** 2 * Copyright 2005-2014 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.opensource.org/licenses/ecl2.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.kuali.rice.core.api.datetime; 17 18 import java.sql.Time; 19 import java.sql.Timestamp; 20 import java.text.ParseException; 21 import java.util.Calendar; 22 import java.util.Date; 23 24 /** 25 * This interface defines methods that a DateTime service must provide 26 */ 27 public interface DateTimeService { 28 /** 29 * Translates the specified date into a string without a time component, formatted according to "stringDateFormat" that the 30 * service is configured with 31 * 32 * @param date 33 * @return formatted string version of the specified date 34 */ 35 String toDateString(Date date); 36 37 /** 38 * Translates the specified time into a string without a date component, formatted according to "stringTimeFormat" that the 39 * service is configured with 40 * 41 * @param time 42 * @return formatted string version of the specified time 43 */ 44 String toTimeString(Time time); 45 46 /** 47 * Translates the specified date into a string with a time component, formatted according to the "stringDateTimeFormat" that the 48 * service is configured with 49 * 50 * @param date 51 * @return formatted string version of the specified date 52 */ 53 String toDateTimeString(Date date); 54 55 /** 56 * Translates the specified date into a string without a time component, formatted according to the specified pattern 57 * 58 * @param date 59 * @return formatted string version of the specified date 60 */ 61 String toString(Date date, String pattern); 62 63 /** 64 * Returns the current date/time as a java.util.Date 65 * 66 * @return current date/time 67 */ 68 Date getCurrentDate(); 69 70 /** 71 * Returns the current date/time as a java.sql.Timestamp 72 * 73 * @return current date/time 74 */ 75 Timestamp getCurrentTimestamp(); 76 77 /** 78 * Returns the current date/time as a java.sql.Date 79 * 80 * @return current date/time 81 */ 82 java.sql.Date getCurrentSqlDate(); 83 84 /** 85 * Returns the current date as a java.sql.Date rounded back to midnight. This is what the JDBC driver is supposed to do with 86 * dates on their way to the database, so it can be convenient for comparing to dates from the database or input from the UI. 87 * 88 * @return current date at the most recent midnight in the JVM's timezone 89 */ 90 java.sql.Date getCurrentSqlDateMidnight(); 91 92 /** 93 * Returns a Calendar initialized with the current Date 94 * 95 * @return currennt Calendar 96 */ 97 Calendar getCurrentCalendar(); 98 99 /** 100 * Returns a Calendar initialized to the given Date 101 * 102 * @return date-specific Calendar 103 * @throws IllegalArgumentException if the given Date is null 104 */ 105 Calendar getCalendar(Date date); 106 107 /** 108 * Translates the specified string into a date without a time component, see implementation class for formatting details 109 * 110 * @param dateString 111 * @return the date representation of the specified dateString 112 * @throws ParseException 113 */ 114 Date convertToDate(String dateString) throws ParseException; 115 116 /** 117 * Translates the specified string into a date with a time component, formatted according to "stringDateTimeFormat" that the 118 * service is configured with 119 * 120 * @param dateTimeString 121 * @return the date representation of the specified dateTimeString 122 * @throws ParseException 123 */ 124 Date convertToDateTime(String dateTimeString) throws ParseException; 125 126 /** 127 * Converts the given String into a java.sql.Timestamp instance according to the "stringDateTimeFormat" that the service is 128 * configured with 129 * 130 * @param timeString 131 * @return java.sql.Timestamp 132 * @throws IllegalArgumentException if the given string is null or blank 133 * @throws ParseException if the string cannot be converted 134 */ 135 java.sql.Timestamp convertToSqlTimestamp(String timeString) throws ParseException; 136 137 /** 138 * Converts the given String into a java.sql.Date instance 139 * 140 * @param dateString 141 * @return java.sql.Date 142 * @throws IllegalArgumentException if the given string is null or blank 143 * @throws ParseException if the string cannot be converted 144 */ 145 java.sql.Date convertToSqlDate(String dateString) throws ParseException; 146 147 /** 148 * Converts the given String into a java.sql.Date instance for the next day 149 * 150 * @param dateString 151 * @return java.sql.Date 152 * @throws IllegalArgumentException if the given string is null or blank 153 * @throws ParseException if the string cannot be converted 154 * 155 * @since 2.4 156 */ 157 java.sql.Date convertToSqlDateUpperBound(String dateString) throws ParseException; 158 159 /** 160 * Converts the given String into a java.sql.Time instance 161 * 162 * @param timeString 163 * @return java.sql.Time 164 * @throws IllegalArgumentException if the given string is null or blank 165 * @throws ParseException if the string cannot be converted 166 */ 167 java.sql.Time convertToSqlTime(String timeString) throws ParseException; 168 169 /** 170 * Converts a Timestamp into a sql Date. 171 * 172 * @param timestamp 173 * @return 174 */ 175 java.sql.Date convertToSqlDate(Timestamp timestamp) throws ParseException; 176 177 /** 178 * Returns the number of days between two days - start and end date of some arbitrary period. 179 * 180 * @param date1 The first date in the period 181 * @param date2 The second date in the period 182 * @param inclusive Whether the result should include both the start and the end date. Otherwise it only includes one. 183 * @return int The number of days in the period 184 */ 185 int dateDiff(Date date1, Date date2, boolean inclusive); 186 187 /** 188 * Returns a String representing a date that is suitable for file names, and is preferably chronologically sortable 189 * 190 * @param date 191 * @return 192 */ 193 String toDateStringForFilename(Date date); 194 195 /** 196 * Returns a String representing a date/time that is suitable for file names, and is preferably chronologically sortable 197 * 198 * @param date 199 * @return 200 */ 201 String toDateTimeStringForFilename(Date date); 202 203 204 }