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

# User Rev Content
1 tdb 1.6 /*
2     * i-scream central monitoring system
3 tdb 1.7 * http://www.i-scream.org.uk
4 tdb 1.6 * 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 tdb 1.1 //---PACKAGE DECLARATION---
22 tdb 1.8 package uk.org.iscream.cms.util;
23 tdb 1.1
24     //---IMPORTS---
25     import java.util.*;
26     import java.text.*;
27    
28     /**
29     * Provides easy to use date functions.
30     *
31 tdb 1.6 * @author $Author: tdb $
32 tdb 1.8 * @version $Id: DateUtils.java,v 1.7 2002/05/21 16:47:19 tdb Exp $
33 tdb 1.1 */
34     public class DateUtils {
35    
36     //---FINAL ATTRIBUTES---
37    
38     /**
39     * The current CVS revision of this class
40     */
41 tdb 1.8 public final String REVISION = "$Revision: 1.7 $";
42 tdb 1.1
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 tdb 1.2 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 tdb 1.1
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 tdb 1.2 }
149    
150 tdb 1.1 /**
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 tdb 1.2 }
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 tdb 1.1
214 tdb 1.4 /**
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 tdb 1.1
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 tdb 1.5 * This uses the uk.org.iscream.cms.server.util.FormatName class
242 tdb 1.1 * 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 tdb 1.2
253 tdb 1.1 //---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     }