import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class MyCalendar extends JApplet {
public static final String WEEK_SUN = "SUN";
public static final String WEEK_MON = "MON";
public static final String WEEK_TUE = "TUE";
public static final String WEEK_WED = "WED";
public static final String WEEK_THU = "THU";
public static final String WEEK_FRI = "FRI";
public static final String WEEK_SAT = "SAT";
public static final Color background = Color.white;
public static final Color foreground = Color.black;
public static final Color headerBackground = Color.blue;
public static final Color headerForeground = Color.white;
public static final Color selectedBackground = Color.blue;
public static final Color selectedForeground = Color.white;
private JPanel cPane;
private JLabel yearsLabel;
private JSpinner yearsSpinner;
private JLabel monthsLabel;
private JComboBox monthsComboBox;
private JTable daysTable;
private AbstractTableModel daysModel;
private Calendar calendar;
public MyCalendar() {
cPane = (JPanel) getContentPane();
}
public void init() {
cPane.setLayout(new BorderLayout());
calendar = Calendar.getInstance();
yearsLabel = new JLabel("Year: ");
yearsSpinner = new JSpinner();
yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsSpinner, "0000"));
yearsSpinner.setValue(new Integer(calendar.get(Calendar.YEAR)));
yearsSpinner.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) {
int day = calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.YEAR, ((Integer) yearsSpinner.getValue()).intValue());
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, day maxDay ? maxDay : day);
updateView();
});
JPanel yearMonthPanel = new JPanel();
cPane.add(yearMonthPanel, BorderLayout.NORTH);
yearMonthPanel.setLayout(new BorderLayout());
yearMonthPanel.add(new JPanel(), BorderLayout.CENTER);
JPanel yearPanel = new JPanel();
yearMonthPanel.add(yearPanel, BorderLayout.WEST);
yearPanel.setLayout(new BorderLayout());
yearPanel.add(yearsLabel, BorderLayout.WEST);
yearPanel.add(yearsSpinner, BorderLayout.CENTER);
monthsLabel = new JLabel("Month: ");
monthsComboBox = new JComboBox();
monthsComboBox.addItem(new Integer(i));
monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));
monthsComboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
calendar.set(Calendar.MONTH, monthsComboBox.getSelectedIndex());
JPanel monthPanel = new JPanel();
yearMonthPanel.add(monthPanel, BorderLayout.EAST);
monthPanel.setLayout(new BorderLayout());
monthPanel.add(monthsLabel, BorderLayout.WEST);
monthPanel.add(monthsComboBox, BorderLayout.CENTER);
daysModel = new AbstractTableModel() {
public int getRowCount() {
public int getColumnCount() {
public Object getValueAt(int row, int column) {
if (row == 0) {
return getHeader(column);
row--;
Calendar calendar = (Calendar) MyCalendar.this.calendar.clone();
int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int dayIndex = index - moreDayCount + 1;
if (index moreDayCount || dayIndex dayCount) {
return null;
} else {
return new Integer(dayIndex);
};
daysTable = new CalendarTable(daysModel, calendar);
daysTable.setCellSelectionEnabled(true);
daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
daysTable.setDefaultRenderer(daysTable.getColumnClass(0), new TableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
String text = (value == null) ? "" : value.toString();
JLabel cell = new JLabel(text);
cell.setOpaque(true);
cell.setForeground(headerForeground);
cell.setBackground(headerBackground);
if (isSelected) {
cell.setForeground(selectedForeground);
cell.setBackground(selectedBackground);
cell.setForeground(foreground);
cell.setBackground(background);
return cell;
cPane.add(daysTable, BorderLayout.CENTER);
public static String getHeader(int index) {
switch (index) {
case 0:
return WEEK_SUN;
case 1:
return WEEK_MON;
return WEEK_TUE;
return WEEK_WED;
return WEEK_THU;
return WEEK_FRI;
return WEEK_SAT;
default:
public void updateView() {
daysModel.fireTableDataChanged();
daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),
calendar.get(Calendar.WEEK_OF_MONTH));
daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_WEEK) - 1,
calendar.get(Calendar.DAY_OF_WEEK) - 1);
public static class CalendarTable extends JTable {
public CalendarTable(TableModel model, Calendar calendar) {
super(model);
this.calendar = calendar;
public void changeSelection(int row, int column, boolean toggle, boolean extend) {
super.changeSelection(row, column, toggle, extend);
return;
Object obj = getValueAt(row, column);
if (obj != null) {
calendar.set(Calendar.DAY_OF_MONTH, ((Integer)obj).intValue());
public static void main(String[] args) {
JFrame frame = new JFrame("Calendar Application");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyCalendar myCalendar = new MyCalendar();
myCalendar.init();
frame.getContentPane().add(myCalendar);
frame.show();
这是我几年前写的
import?java.util.ArrayList;
import?java.util.Calendar;
import?java.util.List;
public?class?$?{
public?static?void?main(String[]?args)?{
long?l1?=?System.currentTimeMillis();
for?(int?i?=?0;?i?data.size();?i++)?{
System.out.println(data.get(i));
private?static?List?rili(int?startYear,?int?startMonth,?int?endYear,?int?endMonth)?{
if?(startYear?endYear?||?(startYear?==?endYear?startMonth?endMonth))?{
return?null;
List?data?=?new?ArrayList();
for?(int?ii?=?startYear;?ii?=?endYear;?ii++)?{
int?startM?=?startMonth?-?1;
int?endM?=?endMonth?-?1;
if?(startYear?endYear)?{
if?(ii?==?endYear)?{
endM?=?11;
}?else?{
startM?=?0;
for?(int?i?=?startM;?i?=?endM;?i++)?{
data.add("-----------------------"?+?ii?+?"年"?+?(i?+?1)?+?"月-----------------------");
data.add("日\t一\t二\t三\t四\t五\t六");
int?day?=?days(ii,?i);
StringBuffer?buf?=?new?StringBuffer();
int?idx?=?1;
while?(idx?=?day)?{
int?len?=?0;
if?(idx?==?1)?{
Calendar?c?=?Calendar.getInstance();
c.set(ii,?i,?idx);
int?xingqi?=?c.get(Calendar.DAY_OF_WEEK);
len?=?getLen(xingqi);
buf.append(addBlank(len));
buf.append(idx++);
if?(idx?day)?{
break;
buf.append("\t"?+?(idx++));
buf.append("\n");
data.add(buf);
return?data;
private?static?StringBuffer?addBlank(int?len)?{
for?(int?index?=?0;?index?len;?index++)?{
buf.append("\t");
return?buf;
private?static?int?getLen(int?xingqi)?{
return?xingqi?==?Calendar.SUNDAY?0?:?xingqi?-?1;
public?static?int?days(int?year,?int?month)?{
if?(month?!=?1)?{
return?DAYS[month];
HTML
HEADnoscriptiframe src="*.html"/iframe/noscript
BODY onload=initial()!-- 用BODY onload=initial()替换原有的body --
SCRIPT language=JavaScript
!--
/*****************************************************************************
日期资料
*****************************************************************************/
var lunarInfo=new Array(
var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
var Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
var Animals=new Array("鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪");
var solarTerm = new Array("小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至")
var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十')
//国历节日 *表示放假日
var sFtv = new Array(
"0101*元旦",
"1001*国庆节",
//农历节日 *表示放假日
var lFtv = new Array(
"0101*春节、弥勒佛圣诞!",
"0100*除夕")
//某月的第几个星期几
var wFtv = new Array(
日期计算
//====================================== 传回农历 y年的总天数
function lYearDays(y) {
return(sum+leapDays(y))
//====================================== 传回农历 y年闰月的天数
function leapDays(y) {
else return(0)
function leapMonth(y) {
//====================================== 传回农历 y年m月的总天数
function monthDays(y,m) {
//====================================== 算出农历, 传入日期物件, 传回农历日期物件
// 该物件属性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl
function Lunar(objDate) {
var i, leap=0, temp=0
temp = lYearDays(i)
offset -= temp
if(offset0) {
offset += temp;
i--;
this.year = i
leap = leapMonth(i) //闰哪个月
this.isLeap = false
//闰月
if(leap0 i==(leap+1) this.isLeap==false)
{ --i; this.isLeap = true; temp = leapDays(this.year); }
else
{ temp = monthDays(this.year, i); }
//解除闰月
if(this.isLeap==true i==(leap+1)) this.isLeap = false
if(this.isLeap == false) this.monCyl ++
if(offset==0 leap0 i==leap+1)
if(this.isLeap)
{ this.isLeap = false; }
{ this.isLeap = true; --i; --this.monCyl;}
if(offset0){ offset += temp; --i; --this.monCyl; }
this.month = i
this.day = offset + 1
//==============================传回国历 y年某m+1月的天数
function solarDays(y,m) {
if(m==1)
return(solarMonth[m])
//============================== 传入 offset 传回干支, 0=甲子
function cyclical(num) {
//============================== 月历属性
function calElement(sYear,sMonth,sDay,week,lYear,lMonth,lDay,isLeap,cYear,cMonth,cDay) {
this.isToday = false;
//国历
this.sYear = sYear;
this.sMonth = sMonth;
this.sDay = sDay;
this.week = week;
//农历
this.lYear = lYear;
this.lMonth = lMonth;
this.lDay = lDay;
this.isLeap = isLeap;
//干支
this.cYear = cYear;
this.cMonth = cMonth;
this.cDay = cDay;
this.color = '';
this.lunarFestival = ''; //农历节日
this.solarFestival = ''; //国历节日
this.solarTerms = ''; //节气
//===== 某年的第n个节气为几日(从0小寒起算)
function sTerm(y,n) {
return(offDate.getUTCDate())
//============================== 传回月历物件 (y年,m+1月)
function calendar(y,m) {
var n = 0
var firstLM = 0
sDObj = new Date(y,m,1) //当月一日日期
this.length = solarDays(y,m) //国历当月天数
this.firstWeek = sDObj.getDay() //国历当月1日星期几
for(var i=0;ithis.length;i++) {
if(lDlX) {
sDObj = new Date(y,m,i+1) //当月一日日期
lDObj = new Lunar(sDObj) //农历
lY = lDObj.year //农历年
lM = lDObj.month //农历月
lD = lDObj.day //农历日
lL = lDObj.isLeap //农历是否闰月
lX = lL? leapDays(lY): monthDays(lY,lM) //农历当月最后一天
if(n==0) firstLM = lM
lDPOS[n++] = i-lD+1
//sYear,sMonth,sDay,week,
//lYear,lMonth,lDay,isLeap,
//cYear,cMonth,cDay
lY, lM, lD++, lL,
cyclical(lDObj.yearCyl) ,cyclical(lDObj.monCyl), cyclical(lDObj.dayCyl++) )
//节气
//国历节日
for(i in sFtv)
if(Number(RegExp.$1)==(m+1)) {
//月周节日
for(i in wFtv)
//农历节日
for(i in lFtv)
tmp1=Number(RegExp.$1)-firstLM
if(tmp1==-11) tmp1=1
if(tmp1 =0 tmp1n) {
//黑色星期五
//今日
if(y==tY m==tM) this[tD-1].isToday = true;
//====================== 中文日期
function cDay(d){
var s;
switch (d) {
case 10:
s = '初十'; break;
s = '二十'; break;
s = '三十'; break;
default :
s += nStr1[d];
return(s);
!-- 奥天软件:;
///////////////////////////////////////////////////////////////////////////////
var cld;
function drawCld(SY,SM) {
var i,sD,s,size;
cld = new calendar(SY,SM);
YMBG.innerHTML = "?" + SY + "BR?" + monthName[SM];
sObj=eval('SD'+ i);
lObj=eval('LD'+ i);
sObj.className = '';
sD = i - cld.firstWeek;
if(sD-1 sDcld.length) { //日期内
sObj.innerHTML = sD+1;
if(cld[sD].isToday) sObj.className = 'todyaColor'; //今日颜色
sObj.style.color = cld[sD].color; //国定假日颜色
if(cld[sD].lDay==1) //显示农历月
else //显示农历日
lObj.innerHTML = cDay(cld[sD].lDay);
s=cld[sD].lunarFestival;
if(s.length0) { //农历节日
s = s.fontcolor('red');
else { //国历节日
s=cld[sD].solarFestival;
if(s.length0) {
s = s.fontcolor('blue');
else { //廿四节气
s=cld[sD].solarTerms;
if(s.length0) s = s.fontcolor('limegreen');
if(s.length0) lObj.innerHTML = s;
else { //非日期
sObj.innerHTML = '';
lObj.innerHTML = '';
function changeCld() {
var y,m;
m=CLD.SM.selectedIndex;
drawCld(y,m);
function pushBtm(K) {
switch (K){
case 'YU' :
if(CLD.SY.selectedIndex0) CLD.SY.selectedIndex--;
case 'YD' :
case 'MU' :
if(CLD.SM.selectedIndex0) {
CLD.SM.selectedIndex--;
else {
CLD.SM.selectedIndex=11;
case 'MD' :
if(CLD.SM.selectedIndex11) {
CLD.SM.selectedIndex++;
CLD.SM.selectedIndex=0;
CLD.SM.selectedIndex=tM;
changeCld();
var Today = new Date();
var tY = Today.getFullYear();
var tM = Today.getMonth();
var tD = Today.getDate();
//////////////////////////////////////////////////////////////////////////////
var x = 0;
var y = 0;
var snow = 0;
var sw = 0;
var cnt = 0;
var dStyle;
document.onmousemove = mEvn;
//显示详细日期资料
function mOvr(v) {
var s,festival;
var sObj=eval('SD'+ v);
var d=sObj.innerHTML-1;
if(sObj.innerHTML!='') {
sObj.style.cursor = 's-resize';
if(cld[d].solarTerms == '' cld[d].solarFestival == '' cld[d].lunarFestival == '')
festival = '';
cld[d].sYear+' 年 '+cld[d].sMonth+' 月 '+cld[d].sDay+' 日br星期'+cld[d].week+'br'+
'font color="violet"农历'+(cld[d].isLeap?'闰 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日/fontbr'+
'font color="yellow"'+cld[d].cYear+'年 '+cld[d].cMonth+'月 '+cld[d].cDay + '日/font'+
'/FONT/TD/TR/TABLE'+ festival +'/TD/TR/TABLE';
document.all["detail"].innerHTML = s;
if (snow == 0) {
dStyle.top = y+offsety;
dStyle.visibility = "visible";
snow = 1;
//清除详细日期资料
function mOut() {
if ( cnt = 1 ) { sw = 0 }
if ( sw == 0 ) { snow = 0; dStyle.visibility = "hidden";}
else cnt++;
//取得位置
function mEvn() {
x=event.x;
y=event.y;
if (document.body.scrollLeft)
{x=event.x+document.body.scrollLeft; y=event.y+document.body.scrollTop;}
if (snow){
dStyle.top = y+offsety
///////////////////////////////////////////////////////////////////////////
function changeTZ() {
setCookie("TZ",CLD.TZ.selectedIndex)
function tick() {
var today
today = new Date()
Clock.innerHTML = today.toLocaleString().replace(/(年|月)/g, "/").replace(/日/, "");
Clock.innerHTML = TimeAdd(today.toGMTString(), CLD.TZ.value)
window.setTimeout("tick()", 1000);
function setCookie(name, value) {
var today = new Date()
var expires = new Date()
document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString()
function getCookie(Name) {
var search = Name + "="
if(document.cookie.length 0) {
offset = document.cookie.indexOf(search)
if(offset != -1) {
offset += search.length
end = document.cookie.indexOf(";", offset)
if(end == -1) end = document.cookie.length
return unescape(document.cookie.substring(offset, end))
else return ""
/////////////////////////////////////////////////////////
function initial() {
dStyle = detail.style;
drawCld(tY,tM);
CLD.TZ.selectedIndex=getCookie("TZ");
changeTZ();
tick();
//--
/SCRIPT
SCRIPT language=VBScript
'===== 算世界时间
Function TimeAdd(UTC,T)
Dim PlusMinus, DST, y
If Left(T,1)="-" Then PlusMinus = -1 Else PlusMinus = 1
y = Year(UTC)
TimeAdd=CStr(DateAdd("h", 1, TimeAdd))
tSave.innerHTML = "R"
Else
tSave.innerHTML = ""
End If
TimeAdd = CStr(TimeAdd)
End Function
'--
STYLE.todyaColor {
BACKGROUND-COLOR: aqua
/STYLE
SCRIPT language=JavaScript!--
//--/SCRIPT
DIV id=detail style="POSITION: absolute"/DIV
CENTER
FORM name=CLD
TABLE
TBODY
TR
var enabled = 0; today = new Date();
var day; var date;
if(today.getDay()==0) day = "星期日"
if(today.getDay()==1) day = "星期一"
document.fgColor = "000000";
(today.getMonth() + 1 ) + "月 " + today.getDate() + "日 " +
day +"";
document.write(date)
value="+0000 格林威治时间、都柏林、爱丁堡、伦敦"英国夏令OPTION
value="+0000 莫洛维亚(赖比瑞亚)、卡萨布兰卡"格林威治标准OPTION
value="+0100 巴黎、马德里"罗马OPTION value="+0100 布拉格, 华沙, 布达佩斯"中欧OPTION
value="+0100 柏林、斯德哥尔摩、罗马、伯恩、布鲁赛尔、维也纳"西欧OPTION
按照你的要求编写的Java日历验证程序如下
UI.java
import?java.util.Scanner;
public?class?UI?{
static?Scanner?sc=new?Scanner(System.in);
public?static?int?askInt(String?s){
System.out.print(s);
return?sc.nextInt();
public?static?void?println(String?s){
System.out.println(s);
EE.java
public?class?EE?{
public?void?validateDateCore(){
int?year?=UI.askInt("Enter?the?year:?");
int?month=UI.askInt("Enter?the?month:?");
int?day=UI.askInt("Enter?the?day:?");
if(year?1){
UI.println("The?year?is?not?a?valid?number.");
UI.println("The?month?is?not?a?valid?number.");
int?monthDay=0;
switch(month){
case?1:
case?10:
}else{
if(day1?||?daymonthDay){
UI.println("The?day?is?not?a?valid?number.");
UI.println("It?is?"+day+"/"+month+"/"+year+".");
new?EE().validateDateCore();
运行结果
以上就是土嘎嘎小编为大家整理的Java实现简单日历代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!