專案中常需處理日期、時間、時區等資訊。本文提供一個功能完整的 JSPCalendar 類別,封裝 java.util.Calendar 與 java.text.DateFormat,可直接取得年、月、日、星期、時區、夏令時間等資訊。
import java.text.DateFormat;
import java.util.*;
public class JSPCalendar {
Calendar calendar = null;
public JSPCalendar() {
calendar = Calendar.getInstance();
Date trialTime = new Date();
calendar.setTime(trialTime);
}
public int getYear() {
return calendar.get(Calendar.YEAR);
}
public String getMonth() {
int m = getMonthInt();
String[] months = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
if (m > 12) return "Unknown to Man";
return months[m - 1];
}
public String getDay() {
int x = getDayOfWeek();
String[] days = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"};
if (x > 7) return "Unknown to Man";
return days[x - 1];
}
public int getMonthInt() {
return 1 + calendar.get(Calendar.MONTH);
}
public String getDate() {
return getMonthInt() + "/" + getDayOfMonth() + "/" + getYear();
}
public String getTime() {
return getHour() + ":" + getMinute() + ":" + getSecond();
}
public int getDayOfMonth() { return calendar.get(Calendar.DAY_OF_MONTH); }
public int getDayOfYear() { return calendar.get(Calendar.DAY_OF_YEAR); }
public int getWeekOfYear() { return calendar.get(Calendar.WEEK_OF_YEAR); }
public int getWeekOfMonth() { return calendar.get(Calendar.WEEK_OF_MONTH); }
public int getDayOfWeek() { return calendar.get(Calendar.DAY_OF_WEEK); }
public int getHour() { return calendar.get(Calendar.HOUR_OF_DAY); }
public int getMinute() { return calendar.get(Calendar.MINUTE); }
public int getSecond() { return calendar.get(Calendar.SECOND); }
public int getEra() { return calendar.get(Calendar.ERA); }
public String getUSTimeZone() {
String[] zones = {"Hawaii", "Alaskan", "Pacific", "Mountain", "Central", "Eastern"};
return zones[10 + getZoneOffset()];
}
public int getZoneOffset() {
return calendar.get(Calendar.ZONE_OFFSET) / (60 * 60 * 1000);
}
public int getDSTOffset() {
return calendar.get(Calendar.DST_OFFSET) / (60 * 60 * 1000);
}
public int getAMPM() { return calendar.get(Calendar.AM_PM); }
// 測試主程式
public static void main(String args[]) {
JSPCalendar db = new JSPCalendar();
System.out.println("date: " + db.getDayOfMonth());
System.out.println("year: " + db.getYear());
System.out.println("month: " + db.getMonth());
System.out.println("time: " + db.getTime());
System.out.println("date: " + db.getDate());
System.out.println("Day: " + db.getDay());
System.out.println("DayOfYear: " + db.getDayOfYear());
System.out.println("WeekOfYear: " + db.getWeekOfYear());
System.out.println("era: " + db.getEra());
System.out.println("ampm: " + db.getAMPM());
System.out.println("DST: " + db.getDSTOffset());
System.out.println("ZONE Offset: " + db.getZoneOffset());
System.out.println("TIMEZONE: " + db.getUSTimeZone());
}
}
JSPCalendar cal = new JSPCalendar();
System.out.println("今天是 " + cal.getDate()); // 例如 6/15/2024
System.out.println("現在時間 " + cal.getTime()); // 例如 14:30:05
System.out.println("星期 " + cal.getDay()); // 例如 Saturday
System.out.println("時區 " + cal.getUSTimeZone()); // 例如 Pacific
getUSTimeZone() 僅適用於美洲時區,其他地區需擴充陣列。java.time 套件(LocalDateTime、ZonedDateTime 等)。