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.9
Committed: Sun Aug 1 10:41:08 2004 UTC (19 years, 8 months ago) by tdb
Branch: MAIN
CVS Tags: HEAD
Changes since 1.8: +3 -3 lines
Log Message:
Catch a lot of old URL's and update them. Also remove a couple of old files
that aren't used.

File Contents

# Content
1 /*
2 * i-scream central monitoring system
3 * http://www.i-scream.org
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.8 2003/02/05 14:27:58 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.8 $";
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 }