001: // DateThread.java
002: // $Id: DateThread.java,v 1.3 2000/08/16 21:37:56 ylafon Exp $
003: // (c) COPYRIGHT MIT and INRIA, 1997.
004: // Please first read the full copyright statement in file COPYRIGHT.html
005:
006: package org.w3c.tools.timers;
007:
008: import java.util.Calendar;
009: import java.util.GregorianCalendar;
010: import java.util.Locale;
011: import java.util.TimeZone;
012:
013: public class DateThread extends Thread {
014: protected static String days[] = { "Sun", "Mon", "Tue", "Wed",
015: "Thu", "Fri", "Sat" };
016: protected static String months[] = { "Jan", "Feb", "Mar", "Apr",
017: "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
018: String date = "";
019: String logDate = "";
020: private TimeZone tz;
021:
022: /**
023: * Give the Date in HTTP/1.1 preferred format
024: * @return A String giving the date in the right format
025: */
026:
027: public synchronized String getDate() {
028: return date;
029: }
030:
031: public synchronized String getLogDate() {
032: return logDate;
033: }
034:
035: /**
036: * The main loop which calculate the date every second
037: */
038:
039: public void run() {
040: int day;
041: int hr, mn, sec;
042: StringBuffer sbdate, ldate;
043: Calendar cal;
044:
045: while (true) {
046: sbdate = new StringBuffer(30);
047: ldate = new StringBuffer(30);
048:
049: cal = new GregorianCalendar(tz, Locale.getDefault());
050: day = cal.get(Calendar.DAY_OF_MONTH);
051: hr = cal.get(Calendar.HOUR_OF_DAY);
052: mn = cal.get(Calendar.MINUTE);
053: sec = cal.get(Calendar.SECOND);
054:
055: // construct date according to the http/1.1 format
056: sbdate.append(days[cal.get(Calendar.DAY_OF_WEEK) - 1]);
057: sbdate.append(", ");
058: if (day < 10)
059: sbdate.append('0');
060: sbdate.append(day);
061: sbdate.append(' ');
062: sbdate.append(months[cal.get(Calendar.MONTH)]);
063: sbdate.append(' ');
064: sbdate.append(cal.get(Calendar.YEAR));
065: sbdate.append(' ');
066: if (hr < 10)
067: sbdate.append('0');
068: sbdate.append(hr);
069: sbdate.append(':');
070: if (mn < 10)
071: sbdate.append('0');
072: sbdate.append(mn);
073: sbdate.append(':');
074: if (sec < 10)
075: sbdate.append('0');
076: sbdate.append(sec);
077: sbdate.append(" GMT");
078:
079: // construct date according to the log date format
080: if (day < 10)
081: ldate.append('0');
082: ldate.append(day);
083: ldate.append('/');
084: ldate.append(months[cal.get(Calendar.MONTH)]);
085: ldate.append('/');
086: ldate.append(cal.get(Calendar.YEAR));
087: ldate.append(':');
088: if (hr < 10)
089: ldate.append('0');
090: ldate.append(hr);
091: ldate.append(':');
092: if (mn < 10)
093: ldate.append('0');
094: ldate.append(mn);
095: ldate.append(':');
096: if (sec < 10)
097: ldate.append('0');
098: ldate.append(sec);
099: ldate.append(" +0");
100:
101: synchronized (this ) {
102: date = sbdate.toString();
103: logDate = ldate.toString();
104: }
105: try {
106: sleep(1000); // sleep 1 sec before new update
107: } catch (InterruptedException ex) {
108: }
109: }
110: }
111:
112: public DateThread() {
113: super ("DateThread");
114: tz = TimeZone.getTimeZone("GMT"); // should be UTC
115: setDaemon(true);
116: setPriority(Thread.MAX_PRIORITY);
117: }
118:
119: public static void main(String args[]) {
120: DateThread dt = new DateThread();
121: dt.start();
122:
123: while (true) {
124: System.out.println("Date [" + dt.getDate() + "]");
125: try {
126: sleep(1000);
127: } catch (InterruptedException ex) {
128: }
129: }
130: }
131: }
|