本文目錄一覽:
- 1、用java控制台實現萬年曆-要求列印當前年月日的日曆表格,要求對當天的日期單獨標示
- 2、用Java編寫一個萬年曆
- 3、如何用Java編寫一個萬年曆
- 4、怎麼用JAVA編寫萬年曆!
- 5、Java日曆查詢程序(萬年曆)
- 6、在java里怎麼做萬年曆,一年的啊
用java控制台實現萬年曆-要求列印當前年月日的日曆表格,要求對當天的日期單獨標示
以下是用java swing編寫的日曆,很好用,在我所做的系統里就能夠正常的使用
接下來 是具體代碼:
package Demo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class DateChooser extends JPanel implements ActionListener,
ChangeListener {
/**
*
*/
private static final long serialVersionUID = 1L;
int startYear = 1980;
int lastYear = 2050;
int width = 270;
int height = 200;
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;
Color rbBorderColor = Color.red;
Color rbButtonColor = Color.pink;
Color rbBtFontColor = Color.red;
JDialog dialog;
JSpinner yearSpin;
JSpinner monthSpin;
JSpinner hourSpin;
JSpinner minuteSpin;
JButton[][] daysButton = new JButton[6][7];
JFormattedTextField jFormattedTextField;
Calendar c = getCalendar();
DateChooser(JFormattedTextField jftf) {
jFormattedTextField = jftf;
setLayout(new BorderLayout());
setBorder(new LineBorder(backGroundColor, 2));
setBackground(backGroundColor);
JPanel topYearAndMonth = createYearAndMonthPanal();
add(topYearAndMonth, BorderLayout.NORTH);
JPanel centerWeekAndDay = createWeekAndDayPanal();
add(centerWeekAndDay, BorderLayout.CENTER);
}
private JPanel createYearAndMonthPanal() {
int currentYear = c.get(Calendar.YEAR);
int currentMonth = c.get(Calendar.MONTH) + 1;
int currentHour = c.get(Calendar.HOUR_OF_DAY);
int currentMinute = c.get(Calendar.MINUTE);
JPanel result = new JPanel();
result.setLayout(new FlowLayout());
result.setBackground(controlLineColor);
yearSpin = new JSpinner(new SpinnerNumberModel(currentYear, startYear,
lastYear, 1));
yearSpin.setPreferredSize(new Dimension(48, 20));
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, 12, 1));
monthSpin.setPreferredSize(new Dimension(35, 20));
monthSpin.setName(“Month”);
monthSpin.addChangeListener(this);
result.add(monthSpin);
JLabel monthLabel = new JLabel(“月”);
monthLabel.setForeground(controlTextColor);
result.add(monthLabel);
hourSpin = new JSpinner(new SpinnerNumberModel(currentHour, 0, 23, 1));
hourSpin.setPreferredSize(new Dimension(35, 20));
hourSpin.setName(“Hour”);
hourSpin.addChangeListener(this);
result.add(hourSpin);
JLabel hourLabel = new JLabel(“時”);
hourLabel.setForeground(controlTextColor);
result.add(hourLabel);
minuteSpin = new JSpinner(new SpinnerNumberModel(currentMinute, 0, 59,
1));
minuteSpin.setPreferredSize(new Dimension(35, 20));
minuteSpin.setName(“Minute”);
minuteSpin.addChangeListener(this);
result.add(minuteSpin);
JLabel minuteLabel = new JLabel(“分”);
minuteLabel.setForeground(controlTextColor);
result.add(minuteLabel);
return result;
}
private JPanel createWeekAndDayPanal() {
String colname[] = { “日”, “一”, “二”, “三”, “四”, “五”, “六” };
JPanel result = new JPanel();
result.setFont(new Font(“宋體”, Font.PLAIN, 12));
result.setLayout(new GridLayout(7, 7));
result.setBackground(Color.white);
JLabel cell;
for (int i = 0; i 7; i++) {
cell = new JLabel(colname[i]);
cell.setHorizontalAlignment(JLabel.CENTER);
if (i == 0 || i == 6)
cell.setForeground(weekendFontColor);
else
cell.setForeground(weekFontColor);
result.add(cell);
}
int actionCommandId = 0;
for (int i = 0; i 6; i++)
for (int j = 0; j 7; j++) {
JButton numberButton = new JButton();
numberButton.setBorder(null);
numberButton.setHorizontalAlignment(SwingConstants.CENTER);
numberButton.setActionCommand(String.valueOf(actionCommandId));
numberButton.addActionListener(this);
numberButton.setBackground(palletTableColor);
numberButton.setForeground(dateFontColor);
if (j == 0 || j == 6)
numberButton.setForeground(weekendFontColor);
else
numberButton.setForeground(dateFontColor);
daysButton[i][j] = numberButton;
numberButton.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
closeAndSetDate();
}
}
});
result.add(numberButton);
actionCommandId++;
}
return result;
}
private JDialog createDialog(Frame 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);
return result;
}
public void showDateChooser(Point position) {
Object tmpobj=SwingUtilities.getWindowAncestor(jFormattedTextField);
if(tmpobj.getClass().isInstance(new JDialog())||tmpobj.getClass().getSuperclass().isInstance(new JDialog()))
{
JDialog ownerdialog = (JDialog) SwingUtilities
.getWindowAncestor(jFormattedTextField);
Frame owner = (Frame) SwingUtilities.getWindowAncestor(ownerdialog);
if (dialog == null || dialog.getOwner() != owner) {
dialog = createDialog(owner);
}
dialog.setLocation(getAppropriateLocation(owner, position));
}
else if(tmpobj.getClass().isInstance(new JFrame())||tmpobj.getClass().getSuperclass().isInstance(new JFrame()))
{
JFrame ownerFrame = (JFrame) SwingUtilities
.getWindowAncestor(jFormattedTextField);
if (dialog == null || dialog.getOwner() != ownerFrame) {
dialog = createDialog(ownerFrame);
}
dialog.setLocation(getAppropriateLocation(ownerFrame, position));
}
flushWeekAndDay();
dialog.setVisible(true);
}
Point getAppropriateLocation(Frame 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;
}
return result;
}
public void closeAndSetDate() {
setDate(c.getTime());
dialog.dispose();
}
private Calendar getCalendar() {
Calendar result = Calendar.getInstance();
result.setTime(getDate());
return result;
}
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 int getSelectedMinute() {
return ((Integer) minuteSpin.getValue()).intValue();
}
private void dayColorUpdate(boolean isOldDay) {
int day = c.get(Calendar.DAY_OF_MONTH);
c.set(Calendar.DAY_OF_MONTH, 1);
int actionCommandId = day – 2 + c.get(Calendar.DAY_OF_WEEK);
int i = actionCommandId / 7;
int j = actionCommandId % 7;
if (isOldDay)
daysButton[i][j].setForeground(dateFontColor);
else
daysButton[i][j].setForeground(todayBackColor);
}
private void flushWeekAndDay() {
c.set(Calendar.DAY_OF_MONTH, 1);
int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH);
int dayNo = 2 – c.get(Calendar.DAY_OF_WEEK);
for (int i = 0; i 6; i++) {
for (int j = 0; j 7; j++) {
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(“Minute”)) {
c.set(Calendar.MINUTE, getSelectedMinute());
return;
}
if (source.getName().equals(“Hour”)) {
c.set(Calendar.HOUR_OF_DAY, getSelectedHour());
return;
}
dayColorUpdate(true);
if (source.getName().equals(“Year”)) {
c.set(Calendar.YEAR, getSelectedYear());
}
if (source.getName().equals(“Month”)) {
c.set(Calendar.MONTH, getSelectedMonth() – 1);
}
flushWeekAndDay();
}
public void actionPerformed(ActionEvent e) {
JButton source = (JButton) e.getSource();
if (source.getText().length() == 0)
return;
dayColorUpdate(true);
source.setForeground(todayBackColor);
int newDay = Integer.parseInt(source.getText());
c.set(Calendar.DAY_OF_MONTH, newDay);
}
public void setDate(Date date) {
jFormattedTextField.setText(getDefaultDateFormat().format(date));
}
public Date getDate() {
try {
String dateString = jFormattedTextField.getText();
return getDefaultDateFormat().parse(dateString);
} catch (ParseException e) {
return getNowDate();
} catch (Exception ee) {
return getNowDate();
}
}
private static Date getNowDate() {
return Calendar.getInstance().getTime();
}
private static SimpleDateFormat getDefaultDateFormat() {
return new SimpleDateFormat(“yyyy-MM-dd HH:mm”);
}
}
測試程序:
package Demo;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class DemoForDateChooser extends JFrame {
private JFormattedTextField formattedTextField;
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
DemoForDateChooser frame = new DemoForDateChooser();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame
*/
public DemoForDateChooser() {
super();
setTitle(“日期選擇框”);
getContentPane().setLayout(null);
setBounds(100, 100, 383, 137);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBounds(0, 0, 375, 107);
getContentPane().add(panel);
formattedTextField = new JFormattedTextField();
formattedTextField.setBounds(68, 48, 175, 23);
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
DateChooser mDateChooser=new DateChooser(formattedTextField);
Point p = button.getLocationOnScreen();
p.y = p.y + 30;
mDateChooser.showDateChooser(p);
formattedTextField.requestFocusInWindow();
}
});
button.setText(“選擇日期”);
button.setBounds(249, 47, 99, 23);
panel.add(button);
final JLabel label = new JLabel();
label.setText(“日期:”);
label.setBounds(10, 47, 71, 23);
panel.add(label);
panel.add(formattedTextField);
//
}
}
用Java編寫一個萬年曆
package com.baidu;
/**
* MainFrame.java
* Summary 萬年曆主類
* Created on
* @author
* remark 如有改動請發一份代碼給我,郵箱wsh.grxx@163.com
*/
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;
class MainFrame extends JFrame {
/** */
/**
*
*/
private static final long serialVersionUID = 1L;
JPanel panel = new JPanel(new BorderLayout());
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel(new GridLayout(7, 7));
JPanel panel3 = new JPanel();
JLabel[] label = new JLabel[49];
JLabel y_label = new JLabel(“年份”);
JLabel m_label = new JLabel(“月份”);
JComboBox com1 = new JComboBox();
JComboBox com2 = new JComboBox();
int re_year, re_month;
int x_size, y_size;
String year_num;
Calendar now = Calendar.getInstance(); // 實例化Calendar
MainFrame() {
super(“萬年曆”);
setSize(300, 350);
x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth());
y_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight());
setLocation((x_size – 300) / 2, (y_size – 350) / 2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel1.add(y_label);
panel1.add(com1);
panel1.add(m_label);
panel1.add(com2);
for (int i = 0; i 49; i++) {
label[i] = new JLabel(“”, JLabel.CENTER);// 將顯示的字元設置為居中
panel2.add(label[i]);
}
panel3.add(new Clock(this));
panel.add(panel1, BorderLayout.NORTH);
panel.add(panel2, BorderLayout.CENTER);
panel.add(panel3, BorderLayout.SOUTH);
panel.setBackground(Color.white);
panel1.setBackground(Color.white);
panel2.setBackground(Color.white);
panel3.setBackground(Color.white);
Init();
com1.addActionListener(new ClockAction());
com2.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_month = Integer.parseInt(com2.getSelectedItem().toString()) – 1; // 得到當前月份,並減1,計算機中的月為0-11
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[] = { “日”, “一”, “二”, “三”, “四”, “五”, “六” };
for (int i = 0; i 7; i++) {
label[i].setText(log[i]);
}
for (int i = 0; i 49; i = i + 7) {
label[i].setForeground(Color.red); // 將星期日的日期設置為紅色
}
for (int i = 6; i 49; i = i + 7) {
label[i].setForeground(Color.green);// 將星期六的日期設置為綠色
}
for (int i = 1; i 10000; i++) {
com1.addItem(“” + i);
}
for (int i = 1; i 13; i++) {
com2.addItem(“” + i);
}
month_num = (int) (now.get(Calendar.MONTH)); // 得到當前時間的月份
year = (int) (now.get(Calendar.YEAR)); // 得到當前時間的年份
com1.setSelectedIndex(year – 1); // 設置下拉列表顯示為當前年
com2.setSelectedIndex(month_num); // 設置下拉列表顯示為當前月
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);// 最後一天
for (int i = 7; i 49; i++) { // 初始化標籤
label[i].setText(“”);
}
week_log = week_log + 6; // 將星期數加6,使顯示正確
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();
}
}
package com.baidu;
/**
* Clock.java
* Summary 數字時間顯示
* Created on
* @author
* remark
*/
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.text.SimpleDateFormat;
import java.util.Calendar;
class Clock extends Canvas implements Runnable {
/** */
/**
*
*/
private static final long serialVersionUID = 3660124045489727166L;
MainFrame mf;
Thread t;
String time;
public Clock(MainFrame mf) {
this.mf = mf;
setSize(280, 40);
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) {
Font f = new Font(“宋體”, Font.BOLD, 16);
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);
g.drawString(time, 45, 25);
}
}
借花獻一次.記得我以前回答過一次這個問題,還好代碼還在.copy一個高手的
如何用Java編寫一個萬年曆
/*
題目:輸出任意年份任意月份的日曆表(公元後)
思路:
1.已知1年1月1日是星期日,1 % 7 = 1 對應的是星期日,2 % 7 = 2 對應的是星期一,以此類推;
2.計算當年以前所有天數+當年當月1號之前所有天數;
a.年份分平年閏年,平年365天,閏年366天;
b.閏年的判斷方法year % 400 == 0 || (year % 100 != 0 year % 4 == 0)若為真,則為閏年否則為平年;
c.定義平年/閏年數組,包含各月天數;
d.遍曆數組求和,計算當年當月前總天數;
e.當年以前所有天數+當年當月前總天數+1即為1年1月1日到當年當月1日的總天數;
3.總天數對7取模,根據結果判斷當月1號是星期幾,輸出空白區域;
4.輸出當月日曆表,逢星期六換行
*/
import java.util.Scanner;
class FindMonthList {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println(“請輸入年份:”);
int year = sc.nextInt(); //年份
if (year 1) { //判斷非法輸入年份
System.out.println(“輸入錯誤!”);
return;
}
System.out.println(“請輸入月份:”);
int month = sc.nextInt(); //月份
if (month 1 || month 12) { //判斷非法輸入月份
System.out.println(“輸入錯誤!”);
return;
}
//輸出表頭
System.out.println(“——-” + year + ” 年 ” + month + ” 月 ” + “——-“);
System.out.println();
System.out.println(“日 一 二 三 四 五 六”);
//計算當前年份以前所有天數beforeYearTotalDay;每4年一個閏年,閏年366天,平年365天
int beforeYearTotalDay = ((year – 1) / 4 * 366) + (year-1 – ((year – 1) / 4)) * 365;
int[] arrLeapYear = {0,31,29,31,30,31,30,31,31,30,31,30,31}; //閏年各月天數 int數組
int[] arrNormalYear = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //平年各月天數 int數組
int beforeMonthTotalDay = 0; //定義本年當月之前月份的總天數
if (year % 400 == 0 || (year % 100 != 0 year % 4 == 0)) { //判斷當前年份是否是閏年
for (int i = 0 ; i month ; i ++ ) { //for循環計算當月之前總天數
//計算當前月份之前的所有天數
beforeMonthTotalDay = beforeMonthTotalDay + arrLeapYear[i];
}
//判斷當月1日是星期幾
int totalDay = beforeYearTotalDay + beforeMonthTotalDay + 1;
int week = totalDay % 7;//已知1年1月1日是星期日,即模7得1對應的是星期日
for (int i = 0 ; i (week – 1 + 7) % 7 ; i ++) { //如果寫成i (week-1)會出現i-1的情況
System.out.print(” “);//輸出開頭空白
}
for (int i = 1 ;i = arrLeapYear[month] ;i ++ ) { //for循環輸出各月天數
System.out.print(i + ” “);
if (i 10 ) { //小於10的數補一個空格,以便列印整齊
System.out.print(” “);
}
if (i % 7 == ((7-(week – 1)) % 7 ) || i == arrLeapYear[month]) {//每逢星期六/尾數換行
System.out.println();
}
}
} else { //不是閏年就是平年
for (int i = 0 ; i month ; i ++ ) { //for循環計算出當月之前月份總天數
beforeMonthTotalDay = beforeMonthTotalDay + arrNormalYear[i];
}
//判斷當月1日是星期幾
int totalDay = beforeYearTotalDay + beforeMonthTotalDay + 1;
int week = totalDay % 7;//已知1年1月1日是星期日,即模7得1對應的是星期日
for (int i = 0 ; i (week – 1 + 7) % 7 ; i ++) { //如果寫成i (week-1)會出現i-1的情況
System.out.print(” “);//輸出開頭空白
}
for (int i = 1 ;i = arrNormalYear[month] ;i ++ ) {//for循環輸出各月天數
System.out.print(i + ” “);
if (i 10 ) { //小於10的數補一個空格,以便列印整齊
System.out.print(” “);
}
if (i % 7 == ((7-(week – 1)) % 7 ) || i == arrNormalYear[month]) {//每逢星期六/尾數換行
System.out.println();
}
}
}
}
}
怎麼用JAVA編寫萬年曆!
/*
題目:輸出任意年份任意月份的日曆表(公元後)
思路:
1.已知1年1月1日是星期日,1 % 7 = 1 對應的是星期日,2 % 7 = 2 對應的是星期一,以此類推;
2.計算當年以前所有天數+當年當月1號之前所有天數;
a.年份分平年閏年,平年365天,閏年366天;
b.閏年的判斷方法year % 400 == 0 || (year % 100 != 0 year % 4 == 0)若為真,則為閏年否則為平年;
c.定義平年/閏年數組,包含各月天數;
d.遍曆數組求和,計算當年當月前總天數;
e.當年以前所有天數+當年當月前總天數+1即為1年1月1日到當年當月1日的總天數;
3.總天數對7取模,根據結果判斷當月1號是星期幾,輸出空白區域;
4.輸出當月日曆表,逢星期六換行
*/
import java.util.Scanner;
class FindMonthList {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println(“請輸入年份:”);
int year = sc.nextInt(); //年份
if (year 1) { //判斷非法輸入年份
System.out.println(“輸入錯誤!”);
return;
}
System.out.println(“請輸入月份:”);
int month = sc.nextInt(); //月份
if (month 1 || month 12) { //判斷非法輸入月份
System.out.println(“輸入錯誤!”);
return;
}
//輸出表頭
System.out.println(“——-” + year + ” 年 ” + month + ” 月 ” + “——-“);
System.out.println();
System.out.println(“日 一 二 三 四 五 六”);
//計算當前年份以前所有天數beforeYearTotalDay;每4年一個閏年,閏年366天,平年365天
int beforeYearTotalDay = ((year – 1) / 4 * 366) + (year-1 – ((year – 1) / 4)) * 365;
int[] arrLeapYear = {0,31,29,31,30,31,30,31,31,30,31,30,31}; //閏年各月天數 int數組
int[] arrNormalYear = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //平年各月天數 int數組
int beforeMonthTotalDay = 0; //定義本年當月之前月份的總天數
if (year % 400 == 0 || (year % 100 != 0 year % 4 == 0)) { //判斷當前年份是否是閏年
for (int i = 0 ; i month ; i ++ ) { //for循環計算當月之前總天數
//計算當前月份之前的所有天數
beforeMonthTotalDay = beforeMonthTotalDay + arrLeapYear[i];
}
//判斷當月1日是星期幾
int totalDay = beforeYearTotalDay + beforeMonthTotalDay + 1;
int week = totalDay % 7;//已知1年1月1日是星期日,即模7得1對應的是星期日
for (int i = 0 ; i (week – 1 + 7) % 7 ; i ++) { //如果寫成i (week-1)會出現i-1的情況
System.out.print(” “);//輸出開頭空白
}
for (int i = 1 ;i = arrLeapYear[month] ;i ++ ) { //for循環輸出各月天數
System.out.print(i + ” “);
if (i 10 ) { //小於10的數補一個空格,以便列印整齊
System.out.print(” “);
}
if (i % 7 == ((7-(week – 1)) % 7 ) || i == arrLeapYear[month]) {//每逢星期六/尾數換行
System.out.println();
}
}
} else { //不是閏年就是平年
for (int i = 0 ; i month ; i ++ ) { //for循環計算出當月之前月份總天數
beforeMonthTotalDay = beforeMonthTotalDay + arrNormalYear[i];
}
//判斷當月1日是星期幾
int totalDay = beforeYearTotalDay + beforeMonthTotalDay + 1;
int week = totalDay % 7;//已知1年1月1日是星期日,即模7得1對應的是星期日
for (int i = 0 ; i (week – 1 + 7) % 7 ; i ++) { //如果寫成i (week-1)會出現i-1的情況
System.out.print(” “);//輸出開頭空白
}
for (int i = 1 ;i = arrNormalYear[month] ;i ++ ) {//for循環輸出各月天數
System.out.print(i + ” “);
if (i 10 ) { //小於10的數補一個空格,以便列印整齊
System.out.print(” “);
}
if (i % 7 == ((7-(week – 1)) % 7 ) || i == arrNormalYear[month]) {//每逢星期六/尾數換行
System.out.println();
}
}
}
}
}
效果:
Java日曆查詢程序(萬年曆)
花了半個小時寫了一個望採納給好評。
import java.util.Scanner;
public class PrintCalendar {
/** Main method */
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Prompt the user to enter year
System.out.print(“Enter full year (e.g., 2001): “);
int year = input.nextInt();
// Prompt the user to enter month
System.out.print(“Enter month in number between 1 and 12: “);
int month = input.nextInt();
// Print calendar for the month of the year
printMonth(year, month);
}
/** Print the calendar for a month in a year */
public static void printMonth(int year, int month) {
// Print the headings of the calendar
printMonthTitle(year, month);
// Print the body of the calendar
printMonthBody(year, month);
}
/** Print the month title, e.g., May, 1999 */
public static void printMonthTitle(int year, int month) {
System.out.println(” ” + getMonthName(month)
+ ” ” + year);
System.out.println(“—————————–“);
System.out.println(” Sun Mon Tue Wed Thu Fri Sat”);
}
/** Get the English name for the month */
public static String getMonthName(int month) {
String monthName = “”;
switch (month) {
case 1: monthName = “January”; break;
case 2: monthName = “February”; break;
case 3: monthName = “March”; break;
case 4: monthName = “April”; break;
case 5: monthName = “May”; break;
case 6: monthName = “June”; break;
case 7: monthName = “July”; break;
case 8: monthName = “August”; break;
case 9: monthName = “September”; break;
case 10: monthName = “October”; break;
case 11: monthName = “November”; break;
case 12: monthName = “December”;
}
return monthName;
}
/** Print month body */
public static void printMonthBody(int year, int month) {
// Get start day of the week for the first date in the month
int startDay = getStartDay(year, month);
// Get number of days in the month
int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);
// Pad space before the first day of the month
int i = 0;
for (i = 0; i startDay; i++)
System.out.print(” “);
for (i = 1; i = numberOfDaysInMonth; i++) {
System.out.printf(“%4d”, i);
if ((i + startDay) % 7 == 0)
System.out.println();
}
System.out.println();
}
/** Get the start day of month/1/year */
public static int getStartDay(int year, int month) {
final int START_DAY_FOR_JAN_1_1800 = 3;
// Get total number of days from 1/1/1800 to month/1/year
int totalNumberOfDays = getTotalNumberOfDays(year, month);
// Return the start day for month/1/year
return (totalNumberOfDays + START_DAY_FOR_JAN_1_1800) % 7;
}
/** Get the total number of days since January 1, 1800 */
public static int getTotalNumberOfDays(int year, int month) {
int total = 0;
// Get the total days from 1800 to 1/1/year
for (int i = 1800; i year; i++)
if (isLeapYear(i))
total = total + 366;
else
total = total + 365;
// Add days from Jan to the month prior to the calendar month
for (int i = 1; i month; i++)
total = total + getNumberOfDaysInMonth(year, i);
return total;
}
/** Get the number of days in a month */
public static int getNumberOfDaysInMonth(int year, int month) {
if (month == 1 || month == 3 || month == 5 || month == 7 ||
month == 8 || month == 10 || month == 12)
return 31;
if (month == 4 || month == 6 || month == 9 || month == 11)
return 30;
if (month == 2) return isLeapYear(year) ? 29 : 28;
return 0; // If month is incorrect
}
/** Determine if it is a leap year */
public static boolean isLeapYear(int year) {
return year % 400 == 0 || (year % 4 == 0 year % 100 != 0);
}
}
在java里怎麼做萬年曆,一年的啊
先上張效果圖:以下是實現代碼:/*日曆*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.regex.Pattern;
import javax.swing.*;
public class Demo28 extends JFrame {
int m = 1;
String[] monthchoose = { “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “10”,
“11”, “12” }; // 存放月份的字元數組
String[] columnNames = { “星期日”, “星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六” }; // 存放星期的字元數組
Calendar ca = Calendar.getInstance();
Container contentPane = getContentPane();
VectorString vector = new VectorString();
String[][] date = new String[6][7]; // 表格的顯示數據的格式
TextField tf; // 文本框的值代表的是年份
JComboBox jb;
JTable table; // 把日期用table的方式顯示出來
public void getDate(String year, String month, String week, int Max_Day) {
int n = 0, b = 0;
// 動態把傳進來月份的天數存放到容器里
for (int j = 1; j = Max_Day; j++) {
vector.add(String.valueOf(j));
}
//每次往table里添加數據的時候,都預先把原table里 的 數據清空
for(int x = 0;xdate.length;x++){
for(int y = 0;ydate[x].length;y++){
date[x][y] = null;
}
}
// 根據傳進來月份的第一天是星期幾,來構建Table
for (int a = Integer.parseInt(week) – 1; a date[0].length; a++) {
date[0][a] = new String((String) vector.toArray()[n]);
n++;
}
for (int i = 1; i date.length; i++) {
for (int j = 0; j date[i].length; j++) {
if (n vector.size()) {
date[i][j] = new String((String) vector.toArray()[n]);
n++;
} else
break;
}
}
// 把容器里的數據全部清除,以備下次再存放新的數據
while (b vector.size()) {
vector.remove(b);
}
}
public void chooseDate(String day) {
JLabel label = new JLabel();
for (int y = 0; y date.length; y++) {
for (int z = 0; z date[y].length; z++) {
System.out.print(date[y][z] + ” “);
System.out.println(day);
if (date[y][z] != null) {
if (date[y][z].equals(day)) {
table.setSelectionBackground(Color.yellow);
return;
}
}
}
}
}
public void paint() {
setTitle(“日曆”);
setBounds(200, 200, 350, 178);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
int m = 0;
String year = String.valueOf(ca.get(Calendar.YEAR)); // 得到當前的系統時間的年份,並把這個數值存放到year這個變數里
String month = String.valueOf(ca.get(Calendar.MONTH) + 1); // 得到當前的系統時間的月份,並把這個數值存放到month這個變數里
String day = String.valueOf(ca.get(Calendar.DATE)); // 得到當前的系統時間的日期,並把這個數值存放到day這個變數里
ca.set(Calendar.DATE, 1); // 把Calendar 對象的DATA設置為1
String week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根據設置的Calendar對象,計算出這個月第一天是星期幾
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 得到當前系統時間月份有多少天
getDate(year, month, week, Max_Day);
// 從月份數組裡取出與當前系統時間一樣的月份值
for (int i = 0; i monthchoose.length; i++) {
if (monthchoose[i].equals(month)) {
m = i;
}
}
JToolBar toolBar = new JToolBar();
JButton b1 = new JButton(“<”);
b1.addMouseListener(new myMouseListener1());
JButton b2 = new JButton(“>”);
b2.addMouseListener(new myMouseListener2());
JLabel j1 = new JLabel(“年”);
JLabel j2 = new JLabel(“月”);
tf = new TextField(5);
tf.addKeyListener(new myKeyListener());
tf.setText(year);
jb = new JComboBox(monthchoose);
jb.setSelectedIndex(m);
jb.addActionListener(new myActionListener3());
table = new JTable(date, columnNames);
//table.addMouseListener(new tableMouseListener());
table.setPreferredScrollableViewportSize(new Dimension(350, 150));
JScrollPane jsp = new JScrollPane(table);
contentPane.add(jsp, BorderLayout.CENTER);
chooseDate(day);
toolBar.add(b1);
toolBar.add(tf);
toolBar.add(b2);
toolBar.add(j1);
toolBar.add(jb);
toolBar.add(j2);
toolBar.setLocation(0, 0);
toolBar.setSize(400, 15);
contentPane.add(toolBar, BorderLayout.NORTH);
setVisible(true);
new Thread(new PaintThread()).start(); // 調用內部類PaintThread,根據裡面的設置來重畫
}
public static void main(String[] args) {
Demo28 d28 = new Demo28();
d28.paint();
}
// 滑鼠單擊左邊按鈕觸發的事件
class myMouseListener1 extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
String str = tf.getText().trim(); // 得到文本框的值
int i = Integer.parseInt(str);
i = i – 1;
tf.setText(String.valueOf(i));
String new_year = String.valueOf(i); // 把表示年份的文本框的值存放到變數new_year里
ca.set(Calendar.YEAR, i); // 把Calendar 對象的YEAR設置為用戶設置的年份
String new_month = (String) jb.getSelectedItem(); // 得到月份值
ca.set(Calendar.MONTH, Integer.parseInt(new_month) – 1); // 把Calendar對象的MONTH設置為用戶設置的月份
ca.set(Calendar.DATE, 1); // 把Calendar 對象的DATA設置為1
String new_week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根據設置的Calendar對象,計算出這個月第一天是星期幾
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根據設置後的Calendar對象計算這個月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
}
class myKeyListener extends KeyAdapter {
public void keyReleased(KeyEvent e) {
try {
int i = Integer.parseInt(tf.getText().trim());
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
String new_year = String.valueOf(i);
ca.set(Calendar.YEAR, i); // 把Calendar對象的YEAR設置為用戶設置的年份
String new_month = (String) jb.getSelectedItem(); // 得到月份值
ca.set(Calendar.MONTH, Integer.parseInt(new_month) – 1); // 把Calendar對象的MONTH設置為用戶設置的月份
ca.set(Calendar.DATE, 1); // 把Calendar 對象的DATA設置為1
String new_week = String.valueOf(ca
.get(Calendar.DAY_OF_WEEK)); // 根據設置的Calendar對象,計算出這個月第一天是星期幾
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根據設置後的Calendar對象計算這個月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
} catch (NumberFormatException excption) {
System.out.println(“你輸入的年份不正確!”);
}
}
}
// 滑鼠單擊右邊按鈕觸發的事件
class myMouseListener2 extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
String str = tf.getText().trim();
int i = Integer.parseInt(str);
i = i + 1;
tf.setText(String.valueOf(i));
String new_year = String.valueOf(i); // 把表示年份的文本框的值存放到變數new_year里
ca.set(Calendar.YEAR, i); // 把Calendar 對象的YEAR設置為用戶設置的年份
String new_month = (String) jb.getSelectedItem(); // 得到月份值
ca.set(Calendar.MONTH, Integer.parseInt(new_month) – 1); // 把Calendar對象的MONTH設置為用戶設置的月份
ca.set(Calendar.DATE, 1); // 把Calendar 對象的DATA設置為1
String new_week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根據設置的Calendar對象,計算出這個月第一天是星期幾
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根據設置後的Calendar對象計算這個月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
}
// 滑鼠單擊選擇框觸發的事件
class myActionListener3 implements ActionListener {
public void actionPerformed(ActionEvent e) {
String new_year = String.valueOf(ca.get(Calendar.YEAR)); // 把表示年份的文本框的值存放到變數new_year里
String new_month = (String) jb.getSelectedItem(); // 得到用戶設置的月份
ca.set(Calendar.MONTH, Integer.parseInt(new_month) – 1); // 把Calendar對象的月份值設置為用戶定義的月份
ca.set(Calendar.DATE, 1); // 把Calendar 對象的DATA設置為1
String new_week = String.valueOf(ca.get(Calendar.DAY_OF_WEEK)); // 根據設置的Calendar對象,計算出這個月第一天是星期幾
int Max_Day = ca.getActualMaximum(Calendar.DATE); // 根據設置後的Calendar對象計算這個月份有多少天
getDate(new_year, new_month, new_week, Max_Day);
}
}
// 重畫組件
private class PaintThread implements Runnable {
public void run() {
while (true) {
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243199.html