ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/util/uk/org/iscream/cms/util/DateUtils.java
Revision: 1.8
Committed: Wed Feb 5 14:27:58 2003 UTC (21 years, 3 months ago) by tdb
Branch: MAIN
Changes since 1.7: +3 -3 lines
Log Message:
Util package has been pulled out of the server. Next step will be to modify
the server and conient (and anything else?) to use this instead. New
package name is uk.org.iscream.cms.util. All the java files were moved with
a repo copy, so they retain their history.

File Contents

# Content
1 /*
2 * i-scream central monitoring system
3 * http://www.i-scream.org.uk
4 * Copyright (C) 2000-2002 i-scream
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 */
20
21 //---PACKAGE DECLARATION---
22 package uk.org.iscream.cms.util;
23
24 //---IMPORTS---
25 import java.util.*;
26 import java.text.*;
27
28 /**
29 * Provides easy to use date functions.
30 *
31 * @author $Author: tdb $
32 * @version $Id: DateUtils.java,v 1.7 2002/05/21 16:47:19 tdb Exp $
33 */
34 public class DateUtils {
35
36 //---FINAL ATTRIBUTES---
37
38 /**
39 * The current CVS revision of this class
40 */
41 public final String REVISION = "$Revision: 1.7 $";
42
43 public static final long secsPerMonth = 30*24*60*60;
44 public static final long secsPerWeek = 7*24*60*60;
45 public static final long secsPerDay = 24*60*60;
46 public static final long secsPerHour = 60*60;
47 public static final long secsPerMin = 60;
48
49 private static final String daysKey = "%DAYS%";
50 private static final String hoursKey = "%HOURS%";
51 private static final String minsKey = "%MINS%";
52 private static final String secsKey = "%SECS%";
53
54 //---STATIC METHODS---
55
56 /**
57 * Return the number of seconds between the epoch and midnight earlier today.
58 */
59 public static long startOfToday(){
60 SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd");
61 Date midnight = new Date();
62 String then = formatter.format(midnight);
63
64 ParsePosition pos = new ParsePosition(0);
65 midnight = formatter.parse(then, pos);
66
67 return midnight.getTime()/1000;
68 }
69
70 /**
71 * Return the number of seconds between the epoch and now.
72 */
73 public static long now(){
74 Date now = new Date();
75 return now.getTime()/1000;
76 }
77
78 /**
79 * Accept a long representing the number of seconds since the epoch.
80 * An integer specifies the number of months to subtract.
81 * Returns a long representing the number of seconds since the epoch.
82 */
83 public static long subtractMonths(long before, int months){
84 return before - months*secsPerMonth;
85 }
86
87 /**
88 * Accept a long representing the number of seconds since the epoch.
89 * An integer specifies the number of weeks to subtract.
90 * Returns a long representing the number of seconds since the epoch.
91 */
92 public static long subtractWeeks(long before, int weeks){
93 return before - weeks*secsPerWeek;
94 }
95
96 /**
97 * Accept a long representing the number of seconds since the epoch.
98 * An integer specifies the number of days to subtract.
99 * Returns a long representing the number of seconds since the epoch.
100 */
101 public static long subtractDays(long before, int days){
102 return before - days*secsPerDay;
103 }
104
105 /**
106 * Accept a long representing the number of seconds since the epoch.
107 * An integer specifies the number of hours to subtract.
108 * Returns a long representing the number of seconds since the epoch.
109 */
110 public static long subtractHours(long before, int hours){
111 return before - hours*secsPerHour;
112 }
113
114 /**
115 * Return a nice String representation of the date.
116 */
117 public static String dateString(long t){
118 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
119 Date conv = new Date(t*1000);
120 return formatter.format(conv);
121 }
122
123 /**
124 * Return a nice short String representation of the date.
125 */
126 public static String shortDateString(long t){
127 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
128 Date conv = new Date(t*1000);
129 return formatter.format(conv);
130 }
131
132 /**
133 * Return a String representation of the hour.
134 */
135 public static String hourString(long t){
136 SimpleDateFormat formatter = new SimpleDateFormat("H");
137 Date conv = new Date(t*1000);
138 return formatter.format(conv);
139 }
140
141 /**
142 * Return a String representation of the day name (short format).
143 */
144 public static String dayName(long t){
145 SimpleDateFormat formatter = new SimpleDateFormat("EEE");
146 Date conv = new Date(t*1000);
147 return formatter.format(conv);
148 }
149
150 /**
151 * Return a String representation of the time (short format).
152 */
153 public static String timeString(long t){
154 SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
155 Date conv = new Date(t*1000);
156 return formatter.format(conv);
157 }
158
159 /**
160 * Format a long time (in seconds) as a String. Can be used to
161 * clearly layout a period of time in days, hours, minutes and
162 * seconds. It could, for example, be used to format an uptime.
163 * This method uses a built in default layout, as shown here;
164 * "Days: xx, Hours: xx, Mins: xx, Secs: xx"
165 *
166 * @param time A long value representing the time period in seconds
167 * @return A string representation of the given time period
168 */
169 public static String formatTime(long time) {
170 String defaultLayout = "Days: "+daysKey+", Hours: "+hoursKey+", Mins: "+minsKey+", Secs: "+secsKey;
171 return formatTime(time, defaultLayout);
172 }
173
174 /**
175 * Format a long time (in seconds) as a String. Can be used to
176 * clearly layout a period of time in days, hours, minutes and
177 * seconds. It could, for example, be used to format an uptime.
178 * This method uses a custom layout given as a String. This string
179 * should contain the following keys;
180 * "%DAYS% %HOURS% %MINS% %SECS%"
181 * As an example, the default layout given by formatTime() is
182 * represented by the following layout String;
183 * "Days: %DAYS%, Hours: %HOURS%, Mins: %MINS%, Secs: %SECS%"
184 *
185 * @param time A long value representing the time period in seconds
186 * @param layout The custom layout format to use.
187 * @return A string representation of the given time period
188 */
189 public static String formatTime(long time, String layout) {
190 // calculate days
191 String days = new Long(time / secsPerDay).toString();
192 time = time % secsPerDay;
193
194 // calculate hours
195 String hours = new Long(time / secsPerHour).toString();
196 time = time % secsPerHour;
197
198 // calculate minutes
199 String mins = new Long(time / secsPerMin).toString();
200 time = time % secsPerMin;
201
202 // seconds are left over
203 String secs = new Long(time).toString();
204
205 // put the values into the layout
206 layout = StringUtils.replaceText(layout, daysKey, days);
207 layout = StringUtils.replaceText(layout, hoursKey, hours);
208 layout = StringUtils.replaceText(layout, minsKey, mins);
209 layout = StringUtils.replaceText(layout, secsKey, secs);
210
211 return layout;
212 }
213
214 /**
215 * Takes a time period in seconds and converts it to a
216 * reasonable message.
217 *
218 * @param time the time period in seconds
219 * @return a String respresentation of the given time period
220 */
221 public static String getTimeString(long time) {
222 String timeString = null;
223 if (time >= 3600) {
224 timeString = ((time/60) / 60) + " hour(s)";
225 } else if (time >= 60) {
226 timeString = (time / 60) + " minute(s)";
227 } else {
228 timeString = time + " second(s)";
229 }
230 return timeString;
231 }
232
233 //---CONSTRUCTORS---
234
235 //---PUBLIC METHODS---
236
237 /**
238 * Overrides the {@link java.lang.Object#toString() Object.toString()}
239 * method to provide clean logging (every class should have this).
240 *
241 * This uses the uk.org.iscream.cms.server.util.FormatName class
242 * to format the toString()
243 *
244 * @return the name of this class and its CVS revision
245 */
246 public String toString() {
247 return FormatName.getName(
248 _name,
249 getClass().getName(),
250 REVISION);
251 }
252
253 //---PRIVATE METHODS---
254
255 //---ACCESSOR/MUTATOR METHODS---
256
257 //---ATTRIBUTES---
258
259 /**
260 * This is the friendly identifier of the
261 * component this class is running in.
262 * eg, a Filter may be called "filter1",
263 * If this class does not have an owning
264 * component, a name from the configuration
265 * can be placed here. This name could also
266 * be changed to null for utility classes.
267 */
268 private String _name = null;
269
270 //---STATIC ATTRIBUTES---
271
272 }