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, 9 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

# User Rev Content
1 tdb 1.6 /*
2     * i-scream central monitoring system
3 tdb 1.9 * http://www.i-scream.org
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.9 * @version $Id: DateUtils.java,v 1.8 2003/02/05 14:27:58 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.9 public final String REVISION = "$Revision: 1.8 $";
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     }