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;
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文件:
其中
MainFrame.java是显示日历程序,Clock.java是日历计算程序.编译后运行MainFrame这个类即可.
①MainFrame.java
---
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Date;
import java.util.Calendar;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MainFrame extends JFrame {
/** *//**
*
*/
private static final long serialVersionUID = 1L;
JPanel panel = new JPanel(new BorderLayout());
JPanel panel1 = new JPanel();
JLabel y_label = new JLabel("年份");
JLabel m_label = new JLabel("月份");
JComboBox com1 = new JComboBox();
int re_year, re_month;
int x_size, y_size;
String year_num;
Calendar now = Calendar.getInstance(); // 实例化Calendar
MainFrame() {
super("万年历");
x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth());
y_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel1.add(y_label);
panel1.add(com1);
panel1.add(m_label);
label[i] = new JLabel("", JLabel.CENTER);// 将显示的字符设置为居中
panel.add(panel1, BorderLayout.NORTH);
panel.setBackground(Color.white);
panel1.setBackground(Color.white);
Init();
com1.addActionListener(new ClockAction());
setContentPane(panel);
setVisible(true);
setResizable(false);
class ClockAction implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
int c_year, c_month, c_week;
c_year = Integer.parseInt(com1.getSelectedItem().toString()); // 得到当前所选年份
c_week = use(c_year, c_month); // 调用函数use,得到星期几
Resetday(c_week, c_year, c_month); // 调用函数Resetday
public void Init() {
int year, month_num, first_day_num;
String log[] = { "日", "一", "二", "三", "四", "五", "六" };
label[i].setText(log[i]);
label[i].setForeground(Color.red); // 将星期日的日期设置为红色
label[i].setForeground(Color.green);// 将星期六的日期设置为绿色
for (int i = 1; i 10000; i++) {
com1.addItem("" + i);
month_num = (int) (now.get(Calendar.MONTH)); // 得到当前时间的月份
year = (int) (now.get(Calendar.YEAR)); // 得到当前时间的年份
com1.setSelectedIndex(year - 1); // 设置下拉列表显示为当前年
first_day_num = use(year, month_num);
Resetday(first_day_num, year, month_num);
public int use(int reyear, int remonth) {
int week_num;
now.set(reyear, remonth, 1); // 设置时间为所要查询的年月的第一天
week_num = (int) (now.get(Calendar.DAY_OF_WEEK));// 得到第一天的星期
return week_num;
@SuppressWarnings("deprecation")
public void Resetday(int week_log, int year_log, int month_log) {
int month_day_score; // 存储月份的天数
int count;
month_day_score = 0;
count = 1;
Date date = new Date(year_log, month_log + 1, 1); // now
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, -1); // 前个月
month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 最后一天
label[i].setText("");
month_day_score = month_day_score + week_log;
for (int i = week_log; i month_day_score; i++, count++) {
label[i].setText(count + "");
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
new MainFrame();
-----
//显示时间的类:Clock
* Clock.java
* Summary 数字时间显示
* Created on
* @author
* remark
import java.awt.Canvas;
import java.awt.Font;
import java.awt.Graphics;
import java.text.SimpleDateFormat;
class Clock extends Canvas implements Runnable{
MainFrame mf;
Thread t;
String time;
public Clock(MainFrame mf){
this.mf=mf;
setBackground(Color.white);
t=new Thread(this); //实例化线程
t.start(); //调用线程
public void run(){
while(true){
try{
Thread.sleep(1000); //休眠1秒钟
}catch(InterruptedException e){
System.out.println("异常");
this.repaint(100);
public void paint(Graphics g){
SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss");//格式化时间显示类型
Calendar now=Calendar.getInstance();
time=SDF.format(now.getTime()); //得到当前日期和时间
g.setFont(f);
g.setColor(Color.orange);
我给你贴上我在java核心技术中看到的代码吧,当然没有输入年份和月份,是按照当前时间创建的,写有我写的注释,应该能看的懂
/*
* 日历程序
* Function:
* 显示当前月份的日历
* 总结
import java.text.DateFormatSymbols;
import java.util.*;
public class CalendarTest {
//construct d as current date构造一个日期
GregorianCalendar d = new GregorianCalendar();
//获取今天是这个月的第几天
int today = d.get(Calendar.DAY_OF_MONTH); //Calendar.DAY_OF_MONTH作为参数调用,得到今天是这个月的第几天
int month = d.get(Calendar.MONTH); //月份
d.set(Calendar.DAY_OF_MONTH, 1); //设置d的日期是本月的1号
int firstDayOfWeek = d.getFirstDayOfWeek(); //获取一星期的第一天,我们得到的是Calendar.SUNDAY,因为我们一星期的第一天是周日
int indent = 0; //为了定位本月第一天,定义索引
while (weekDay != firstDayOfWeek) {
//System.out.printf("当前星期的第%d天,位于当月的第%d天, 现在是%d月\n",
// weekDay, d.get(Calendar.DAY_OF_MONTH), d.get(Calendar.MONTH)+1); //Test Code
indent++;//缩进个数+1
d.add(Calendar.DAY_OF_MONTH, -1);//当前天数-1,如果现在是1号,则执行本条代码后,时间变为上一个月最后一天
weekDay = d.get(Calendar.DAY_OF_WEEK); //重新获取当天位于本星期的第几天
String[] weekDayNames = new DateFormatSymbols().getShortWeekdays();//获取简短形式的星期字符串数组
//注释代码1
//Java核心技术的代码
do {
d.add(Calendar.DAY_OF_MONTH, 1); //天数加1
weekDay = d.get(Calendar.DAY_OF_WEEK); //重新获得weekDay的值
} while (weekDay != firstDayOfWeek); //当循环完一个星期后,这里判断不成立,退出循环
//我写的代码,替换上面注释代码1
for (int i=1; iweekDayNames.length; i++)//打印星期标题
System.out.println();//换行
for (int i=1; i=indent; i++)//确定一星期的一天位置,利用上面indent
//实现输出日期
d.set(Calendar.MONTH, month);
d.set(Calendar.DAY_OF_MONTH, 1);
//print day
int day = d.get(Calendar.DAY_OF_MONTH);
if (day == today)
System.out.print("*");
System.out.print("\t");
d.add(Calendar.DATE, 1);//天数加1
weekDay = d.get(Calendar.DAY_OF_WEEK);//刷新weekDay
if (weekDay == firstDayOfWeek) //如果这天等于星期天则换行
System.out.println();
} while (d.get(Calendar.MONTH) == month);
import java.util.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.awt.Point;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Cursor;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.border.LineBorder;
/**
* @company:NEUSOFT
* @Title:日期选择控件
* @Description:在原有基础上修改了以下内容:
* 1. 将容器由Frame改为了Dialog,以便在基于对话框的程序中也能够使用
public class DateChooserJButton extends JButton {
private DateChooser dateChooser = null;
private String preLabel = "";
public DateChooserJButton() {
this(getNowDate());
public DateChooserJButton(SimpleDateFormat df, String dateString) {
this();
setText(df, dateString);
public DateChooserJButton(Date date) {
this("", date);
public DateChooserJButton(String preLabel, Date date) {
if (preLabel != null)
this.preLabel = preLabel;
setDate(date);
setBorder(null);
setCursor(new Cursor(Cursor.HAND_CURSOR));
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (dateChooser == null)
dateChooser = new DateChooser();
Point p = getLocationOnScreen();
dateChooser.showDateChooser(p);
});
private static Date getNowDate() {
return Calendar.getInstance().getTime();
private static SimpleDateFormat getDefaultDateFormat() {
return new SimpleDateFormat("yyyy年MM月dd日");
// 覆盖父类的方法
public void setText(String s) {
Date date;
try {
date = getDefaultDateFormat().parse(s);
} catch (ParseException e) {
date = getNowDate();
public void setText(SimpleDateFormat df, String s) {
date = df.parse(s);
public void setDate(Date date) {
super.setText(preLabel + getDefaultDateFormat().format(date));
public Date getDate() {
String dateString = this.getText().substring(preLabel.length());
return getDefaultDateFormat().parse(dateString);
return getNowDate();
public String getDateString()
{
Date birth =getDate();
DateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd");
return formatDate.format(birth).toString();
//return this.getText().substring(preLabel.length());
// 覆盖父类的方法使之无效
//public void addActionListener(ActionListener listener) {
//}
private class DateChooser extends JPanel implements ActionListener,
ChangeListener {
Color backGroundColor = Color.gray; // 底色
// 月历表格配色----------------//
Color palletTableColor = Color.white; // 日历表底色
Color todayBackColor = Color.orange; // 今天背景色
Color weekFontColor = Color.blue; // 星期文字色
Color dateFontColor = Color.black; // 日期文字色
Color weekendFontColor = Color.red; // 周末文字色
// 控制条配色------------------//
Color controlLineColor = Color.pink; // 控制条底色
Color controlTextColor = Color.white; // 控制条标签文字色
Color rbFontColor = Color.white; // RoundBox文字色
Color rbBorderColor = Color.red; // RoundBox边框色
Color rbButtonColor = Color.pink; // RoundBox按钮色
Color rbBtFontColor = Color.red; // RoundBox按钮文字色
JDialog dialog;
JSpinner yearSpin;
JSpinner monthSpin;
JSpinner hourSpin;
DateChooser() {
setLayout(new BorderLayout());
setBackground(backGroundColor);
JPanel topYearAndMonth = createYearAndMonthPanal();
add(topYearAndMonth, BorderLayout.NORTH);
JPanel centerWeekAndDay = createWeekAndDayPanal();
add(centerWeekAndDay, BorderLayout.CENTER);
private JPanel createYearAndMonthPanal() {
Calendar c = getCalendar();
int currentYear = c.get(Calendar.YEAR);
int currentMonth = c.get(Calendar.MONTH) + 1;
int currentHour = c.get(Calendar.HOUR_OF_DAY);
JPanel result = new JPanel();
result.setLayout(new FlowLayout());
result.setBackground(controlLineColor);
yearSpin = new JSpinner(new SpinnerNumberModel(currentYear,
startYear, lastYear, 1));
yearSpin.setName("Year");
yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####"));
yearSpin.addChangeListener(this);
result.add(yearSpin);
JLabel yearLabel = new JLabel("年");
yearLabel.setForeground(controlTextColor);
result.add(yearLabel);
monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth, 1,
monthSpin.setName("Month");
monthSpin.addChangeListener(this);
result.add(monthSpin);
JLabel monthLabel = new JLabel("月");
monthLabel.setForeground(controlTextColor);
result.add(monthLabel);
①.));
hourSpin.setName("Hour");
hourSpin.addChangeListener(this);
result.add(hourSpin);
JLabel hourLabel = new JLabel("时");
hourLabel.setForeground(controlTextColor);
result.add(hourLabel);
return result;
private JPanel createWeekAndDayPanal() {
String colname[] = { "日", "一", "二", "三", "四", "五", "六" };
// 设置固定字体,以免调用环境改变影响界面美观
result.setBackground(Color.white);
JLabel cell;
cell = new JLabel(colname[i]);
cell.setHorizontalAlignment(JLabel.RIGHT);
cell.setForeground(weekendFontColor);
cell.setForeground(weekFontColor);
result.add(cell);
int actionCommandId = 0;
JButton numberButton = new JButton();
numberButton.setBorder(null);
numberButton.setHorizontalAlignment(SwingConstants.RIGHT);
numberButton.setActionCommand(String
.valueOf(actionCommandId));
numberButton.addActionListener(this);
numberButton.setBackground(palletTableColor);
numberButton.setForeground(dateFontColor);
numberButton.setForeground(weekendFontColor);
daysButton[i][j] = numberButton;
result.add(numberButton);
actionCommandId++;
private JDialog createDialog(JDialog owner) {
JDialog result = new JDialog(owner, "日期时间选择", true);
result.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
result.getContentPane().add(this, BorderLayout.CENTER);
result.pack();
result.setSize(width, height);
void showDateChooser(Point position) {
JDialog owner = (JDialog) SwingUtilities
.getWindowAncestor(DateChooserJButton.this);
if (dialog == null || dialog.getOwner() != owner)
dialog = createDialog(owner);
dialog.setLocation(getAppropriateLocation(owner, position));
flushWeekAndDay();
dialog.setVisible(true);
Point getAppropriateLocation(JDialog owner, Point position) {
Point result = new Point(position);
Point p = owner.getLocation();
int offsetX = (position.x + width) - (p.x + owner.getWidth());
int offsetY = (position.y + height) - (p.y + owner.getHeight());
if (offsetX 0) {
result.x -= offsetX;
if (offsetY 0) {
result.y -= offsetY;
private Calendar getCalendar() {
Calendar result = Calendar.getInstance();
result.setTime(getDate());
private int getSelectedYear() {
return ((Integer) yearSpin.getValue()).intValue();
private int getSelectedMonth() {
return ((Integer) monthSpin.getValue()).intValue();
private int getSelectedHour() {
return ((Integer) hourSpin.getValue()).intValue();
private void dayColorUpdate(boolean isOldDay) {
int day = c.get(Calendar.DAY_OF_MONTH);
c.set(Calendar.DAY_OF_MONTH, 1);
if (isOldDay)
daysButton[i][j].setForeground(dateFontColor);
daysButton[i][j].setForeground(todayBackColor);
private void flushWeekAndDay() {
int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH);
String s = "";
if (dayNo = 1 dayNo = maxDayNo)
s = String.valueOf(dayNo);
daysButton[i][j].setText(s);
dayNo++;
dayColorUpdate(false);
public void stateChanged(ChangeEvent e) {
JSpinner source = (JSpinner) e.getSource();
if (source.getName().equals("Hour")) {
c.set(Calendar.HOUR_OF_DAY, getSelectedHour());
setDate(c.getTime());
return;
dayColorUpdate(true);
if (source.getName().equals("Year"))
c.set(Calendar.YEAR, getSelectedYear());
// (source.getName().equals("Month"))
c.set(Calendar.MONTH, getSelectedMonth() - 1);
JButton source = (JButton) e.getSource();
if (source.getText().length() == 0)
source.setForeground(todayBackColor);
int newDay = Integer.parseInt(source.getText());
c.set(Calendar.DAY_OF_MONTH, newDay);
这是一个专门的选日期的类 ,你看看完了调用就行了
package?com.baidu.calendar;
import?java.awt.BorderLayout;
import?java.awt.Color;
import?java.awt.FlowLayout;
import?java.awt.Font;
import?java.awt.GridLayout;
import?java.awt.event.ItemEvent;
import?java.awt.event.ItemListener;
import?java.text.DateFormat;
import?java.text.SimpleDateFormat;
import?java.util.Calendar;
import?javax.swing.JComboBox;
import?javax.swing.JFrame;
import?javax.swing.JLabel;
import?javax.swing.JPanel;
import?javax.swing.border.CompoundBorder;
import?javax.swing.border.EmptyBorder;
import?javax.swing.border.LineBorder;
public?class?CalendarInterface?extends?JFrame?{
private?static?final?long?serialVersionUID?=?1L;
private?JComboBox?yearBox,?monthBox;
private?JPanel?topPane,?contentPane;
private?JPanel?bottomPane,?bottomTopPane,?mainPane;
private?JLabel?dateLabel;
private?boolean?init?=?false;
private?Calendar?cal;
private?static?final?Calendar?NOW?=?Calendar.getInstance();
private?static?final?String[]?DAY_OF_WEEK?=?{"星期日",?"星期一",?"星期二",
"星期三",?"星期四",?"星期五",?"星期六"};
private?DateFormat?df?=?new?SimpleDateFormat("yyyy年MM月");
private?static?final?Color?FONT_GRAY?=?new?Color(0xaa,?0xaa,?0xaa);
private?static?final?int?DATE_GRAY?=?-1;
private?static?final?int?DATE_RED?=?1;
private?static?final?int?DATE_BLACK?=?0;
public?CalendarInterface()?{
super("日历");
cal?=?Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.SUNDAY);
public?void?launch()?{
setDefaultCloseOperation(EXIT_ON_CLOSE);
//?主面板
contentPane?=?new?JPanel(new?BorderLayout());
contentPane.setBackground(Color.WHITE);
//?顶部选择日期和月份的区域
topPane.setBorder(new?EmptyBorder(0,?0,?10,?0));?//?底部空出10px
topPane.setBackground(Color.WHITE);
//?底部显示星期条和日历列表区域
bottomPane?=?new?JPanel(new?BorderLayout());
bottomPane.setBorder(new?LineBorder(Color.BLACK,?1));
//?星期条
//?日期列表
mainPane?=?new?JPanel();
for(int?i?=?Calendar.SUNDAY;?i?=?Calendar.SATURDAY;?i?++)?{
bottomTopPane.add(createDay(DAY_OF_WEEK[i?-?1]));
bottomPane.add(bottomTopPane,?BorderLayout.NORTH);?//?星期栏放在顶部
//?年份下拉列表
yearBox?=?new?JComboBox();
int?currentYear?=?cal.get(Calendar.YEAR);
for(int?i?=?currentYear?-?YEAR_RANGE;?i?currentYear?+?YEAR_RANGE?+?1;?i?++)?{
yearBox.addItem(i);
yearBox.addItemListener(new?ItemListener()?{
@Override
public?void?itemStateChanged(ItemEvent?e)?{
if(ItemEvent.SELECTED?==?e.getStateChange())?{
reset();?//?选择后刷新布局
yearBox.setSelectedIndex(YEAR_RANGE);?//?默认选中当前年份
//?月份下拉列表
monthBox?=?new?JComboBox(months);
monthBox.addItemListener(new?ItemListener()?{
reset();?//刷新布局
monthBox.setSelectedIndex(cal.get(Calendar.MONTH));?//?选择当前月份
//?显示当前年月的控件
this.dateLabel?=?new?JLabel(df.format(cal.getTime()));
topPane.add(yearBox);
topPane.add(monthBox);
topPane.add(dateLabel);
contentPane.add(topPane,?BorderLayout.NORTH);
bottomPane.add(mainPane,?BorderLayout.CENTER);
contentPane.add(bottomPane,?BorderLayout.CENTER);
setContentPane(contentPane);
validate();
init?=?true;?//?初始化完成
reset();?//?刷新界面
setLocationRelativeTo(null);?//?居中显示
public?static?void?main(String[]?args)?{
new?CalendarInterface().launch();
private?void?reset()?{?//?每次年份或月份改变后则日历重新排列
if(!init)?{?//?若未初始化则返回,避免设置默认年月时调用此方法出错
int?year?=?(Integer)?yearBox.getSelectedItem();
int?month?=?Integer.parseInt((String)?monthBox.getSelectedItem());
//?将日期设置为本月第一天
cal.set(Calendar.YEAR,?year);
cal.set(Calendar.MONTH,?month?-?1);
cal.set(Calendar.DATE,?1);
dateLabel.setText(df.format(cal.getTime()));?//?显示年月
mainPane.removeAll();?//?清空日历列表
//?判断本月第一天是星期几,在第一天之前增加空的日历
int?startDayOfWeek?=?cal.get(Calendar.DAY_OF_WEEK);
int?i;
//?先设置为本周属于上个月的几天,置灰显示
cal.add(Calendar.DATE,?-(startDayOfWeek?-?Calendar.SUNDAY)?-?1);
for(i?=?Calendar.SUNDAY;?i?startDayOfWeek;?i?++)?{
cal.add(Calendar.DATE,?1);
int?date?=?cal.get(Calendar.DATE);
mainPane.add(createDate(Integer.toString(date),?DATE_GRAY));
i?=?startDayOfWeek;
//?重新初始化为本月第一天
int?maxDate?=?cal.getActualMaximum(Calendar.DATE);?//?本月最多的天数(不用再去判断是否闰年了)
for(int?j?=?1;?j?=?maxDate;?j?++)?{
cal.set(Calendar.DATE,?j);?//?日期一直自增,用来判断是否是今天
JLabel?jlDate?=?null;
if(isToday())?{?//?是今天则高亮显示
jlDate?=?createDate(Integer.toString(j),?DATE_RED);
}?else?{?//?不是今天则显示为普通颜色
jlDate?=?createDate(Integer.toString(j));
mainPane.add(jlDate);
//?最后一周把不属于本月的几天用灰色控件填充
int?lastDay?=?cal.get(Calendar.DAY_OF_WEEK);
for(i?=?lastDay;?i?Calendar.SATURDAY;?i?++)?{
mainPane.validate();
private?JLabel?createDate(String?date)?{
return?createDate(date,?DATE_BLACK);
//?创建日期控件
private?JLabel?createDate(String?date,?int?dateColor)?{
JLabel?label?=?new?JLabel(date,?JLabel.CENTER);
CompoundBorder?border?=?new?CompoundBorder(
new?LineBorder(Color.WHITE,?1),
new?EmptyBorder(10,?10,?10,?10));
label.setBorder(border);
if(DATE_GRAY?==?dateColor)?{?//?如果不是本月则文字置灰
label.setForeground(FONT_GRAY);
}?else?if(DATE_RED?==?dateColor)?{?//?如果是今天则高亮显示
label.setForeground(Color.RED);
label.setFont(font);
return?label;
//?创建星期几的横条
private?JLabel?createDay(String?day)?{
JLabel?jlDay?=?new?JLabel(day,?JLabel.CENTER);
jlDay.setBackground(Color.GRAY);
jlDay.setForeground(Color.WHITE);
return?jlDay;
//?判断是否今天
private?boolean?isToday()?{
return?cal.get(Calendar.YEAR)?==?NOW.get(Calendar.YEAR)
cal.get(Calendar.MONTH)?==?NOW.get(Calendar.MONTH)
cal.get(Calendar.DATE)?==?NOW.get(Calendar.DATE);
public class calendar
public static void main(String[] args)
new calendar().makeCalendar();
public void makeCalendar()
int i;
int j;
int year = 0;
int month = 0;
int week = 0;
int totalDay = 0;
Scanner scanner = new Scanner(System.in);
Calendar ca = Calendar.getInstance();
printAsterisk();
System.out.print("欢 迎 使 用 万 年 历");
System.out.print("\n\n请输入年份:");
year = scanner.nextInt();
System.out.print("\n\n请输入月份:");
month = scanner.nextInt() ;
ca.set(year, month - 1,1);
week = ca.get(Calendar.DAY_OF_WEEK)-1;//获取输入月第一天是星期几
totalDay = calculatetotalDay(year , month);
if(judgeLeap_year(year))
totalDay = calculatetotalDay(year , month) + 1;//如果是闰年,加一天
System.out.println("\n\n\n星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for(i = 0;i week;i++)
System.out.print(i + "\t");
System.out.print(i+"\t");
public void printAsterisk()
//获取输入月的天数
public int calculatetotalDay(int year ,int month)
int result = 0;
switch (month)
case 1:
//判断闰年
public boolean judgeLeap_year(int year)
return true;
return false;
以上就是土嘎嘎小编为大家整理的java日历代码怎么写相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!