用JAVA编写日历,要求输入年月,显示那个月的日期和星期几求思路 别粘贴复制代码
解决方案 »
- 为什么这样赋值就是null呢,求各位指点一下。
- 新手求助! 如何更改Swing-JTable单元格中的内容后,存入数据库
- 大家看看双缓冲为什么不能显示?我输出画布大小得到的是0。
- 为啥我的Tomcat关掉,还能访问JSP页面呢?
- JAVA GUI基础题目:怎么样才能是点击【帮助】里的【退出帮助】在弹出的窗口时,为要关闭这一个窗口,而不关闭菜单窗口和登陆界面的窗口?该怎么办啊 其他的不好的地方望帮我改正啊
- jdk版本问题
- 怎么把窗体设为全屏
- 往txt文件写入内容,简单问题,送分!!!
- java再屏幕上画点,要显示出来,然后再对存储的点进行下一步的操作。怎么实现阿?要交作业了,大家帮忙阿!!!!
- 如何不把SQL语句直接写在JAVA程序代码里
- 急,都来看看!java程序连接Access数据库的
- 讨论:Java到底有没有办法把thread绑定CPU或者虚拟绑定CPU运行?
若楼主是用java中的API来实现。可以看看下面,我刚才看到楼主的帖子就简单实现了一个。import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
public class Cal {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入年月:(格式:2011-03)");
String str = input.next();
Calendar cal = getCalendar(str);
print(cal);
}
private static Calendar getCalendar(String str) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);//设置一周的第一天为星期一
try {
cal.setTime(sdf.parse(str));
} catch (ParseException e) {
System.out.println("输入的日期格式有问题,请输入年月:(2010-01)");
}
return cal;
}
/**
* 得到这个月有多少天,考虑闰年的问题
* @param date
*/
private static int getDays(Calendar cal) {
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int days = 0;
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
days = 29;
else
days = 28;
break;
}
return days;
}
private static void print(Calendar cal) {
System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
int i = 0;
int space = cal.get(Calendar.DAY_OF_WEEK) - 1;
for(; i<space; i++) {
System.out.print(" ");
}
int day = cal.get(Calendar.DAY_OF_MONTH);
for(; i<getDays(cal) + space; i++) {
System.out.format("%2d ", day++);
if((i + 1) % 7 == 0)
System.out.println();
}
}
}
import java.util.*;
public class Calendar {
public static void main (String[] args) {
int years,months,day_1,day_2,sum_1,sum_2,sum,firstDay;
boolean testYear;
System.out.print("\n");
System.out.print("*********欢迎使用万年历查询时间*********");
System.out.println ("\n");
System.out.print("请输入年份:");
Scanner input=new Scanner(System.in);
years=input.nextInt();
day_1=0;
day_2=0;
sum_1=0;
sum_2=0;
sum=0;
firstDay=0;
if((years%4==0&&years%100!=0)||years%400==0)
{
System.out.println ("\t"+years+"是闰年");
testYear=true;
}
else{
System.out.println ("\t"+years+"是平年");
testYear=false;
}
for(int i=1900;i<years;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
day_1=366;
}
else
{
day_1=365;
}
sum_1=sum_1+day_1; //计算从输入年份1月1号到1900年1月1号总天数
}
System.out.println ();
System.out.print("请输入月份:");
months=input.nextInt();
/*
*计算输入的月份到该年份的天数
*/
for(int j=1;j<months;j++)
{
if(j==2)
{
if(testYear=true)
{
sum_2=29+sum_2;
}
else{
sum_2=28+sum_2;
}
}
else if((j==4)||(j==6)||(j==9)||(j==11))
{
sum_2=30+sum_2;
}
else
{
sum_2=31+sum_2;
}
}
if(months==2)
{
if(testYear)
{
day_2=29;
}
else
{
day_2=28;
}
}
else if((months==4)||(months==6)||(months==9)||(months==11))
{
day_2=30;
}
else
{
day_2=31;
}
sum=sum_1+sum_2; //累加记录距离1900年1月1号的天数
System.out.print("\n\n");
System.out.println ("星期天"+"\t星期一"+"\t星期二"+"\t星期三"+"\t星期四"+
"\t星期五"+"\t星期六"+"\n");
int temp=1+sum%7; //计算该月份的第一天是星期几
/**周一-周六:使用数字1-6表示,周日用0表示*/
if(temp==7)
{
firstDay=0;
}
else{
firstDay=temp;
}
for(int nullNo=0;nullNo<firstDay;nullNo++)
{
System.out.print("\t"); //循环输出第一行的空格
}
for(int x=1;x<=day_2;x++)
{
System.out.print(x+"\t");
if((sum+x-1)%7==5)
{
System.out.print("\n");//判断当前日x是否是周六,如果是,换行
}
}
}
}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>日期选择</title>
<script type="text/javascript">
function displayDateContrl(date){
var temp=new Date();
temp.setYear(date.getYear());
temp.setMonth(date.getMonth());
temp.setDate(date.getDate());
var month=date.getMonth();
var currentDate=date.getDate();
temp.setDate(1);
var day=temp.getDay();
var dateNumber=1;
document.write("<table border='0' style='text-align:center'>");
document.write("<tr><td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr>");
document.write("<tr>");
for(var i=0;i<day;i++){
document.write("<td></td>");
}
while(true){
document.write("<td>");
if(dateNumber==currentDate){
document.write("<font color='red'>");
document.write(dateNumber);
document.write("</font>");
}else{
document.write(dateNumber);
}
document.write("</td>");
if((dateNumber+day)%7==0){
document.write("</tr>");
}
if(dateNumber>=currentDate){
date.setDate(date.getDate()+1);
}
if(date.getMonth()!=month){
break;
}
if((dateNumber+day)%7==0){
document.write("<tr>");
}
dateNumber++;
}
while((dateNumber+day)%7!=0){
document.write("<td></td>");
dateNumber++;
}
document.write("</tr>");
document.write("</table>");
}
var t=new Date();
displayDateContrl(t);
</script>
</head><body></body>
</html>
可以参考下~
1.输出 一 二。 日,每个用\t隔开
2.根据刚才计算出来的当月1日是星期几做循环输出几个\t的位置。目的就是使当月的1日输出到适当的位置。
3.做循环输出从1日到该月最后一天,每输出7次输出一个换行,注意这里要包含第二步中输出\t的次数。
不知道能看明白吗?
2、以“一年365天”为基准做求值:
2.1、确定星期:用365对7取余的方式确定
2.2、确定月份:例如:一年中的第42天:31(一月界限)<42<59(二月界限),所以这一天在2月
2.3、润一下……在365基础上加一天
3、拿出草稿纸计算一下公元1年1月1号是星期一,那么轮到下一个周一需要多久,中间每年的变化如何,继续用取余的方式对后面的“年”的1月1日的星期取值
package DK_Date;import java.util.Date;public class DK_Date { public int Year; // 年份
public int Month; // 月份
public int Day; // 日期
public int Days; // 当月有几天
public int Week; // 当月第一天为周几 public void getCurDate() {
Date date = new Date(); this.Year = date.getYear() + 1900;
this.Month = date.getMonth() + 1;
this.Day = date.getDate();
} /**
* 判断是否为闰年
*
* @param year
* @return 如果为真则为闰年,反之为平年
*/
public boolean isRun(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 )
return true;
return false;
} /**
* 计算当月天数
*
* @param month
* 月份
* @param year
* 年份
*/
public void getDays(int month, int year) {
switch (month) {
case 2:
if (isRun(year))
this.Days = 29;
else
this.Days = 28;
break;
case 4:
case 6:
case 9:
case 11:
this.Days = 30;
break;
default:
this.Days = 31;
break;
}
} /**
* 计算当月第第一天是一年中的第几天
*
* @param month
* @param year
* @return
*/
public int getYearDays(int month, int year) {
int days = 1;
for (int i = 1; i < month; i++) {
switch (i) {
case 2:
if (isRun(year))
days += 29;
else
days += 28;
break;
case 4:
case 6:
case 9:
case 11:
days += 30;
break;
default:
days += 31;
break;
}
}
return days;
} /**
* 计算1900年到当年1月1日经过了多少天
*
* @param year
* 当前年份
* @return
*/
public int getYearsDay(int year) {
int days = 0;
for (int i = 1900; i < year; i++) {
if (isRun(i))
days += 366;
else
days += 365;
}
return days;
} /**
* 计算当月第一天为周几
*
* @param year
* 年份
* @param month
* 月份
*/
public void getWeek(int year, int month) {
int days = getYearsDay(year) + getYearDays(month, year);
this.Week = days % 7 == 0 ? 7 : days % 7;
}
}
package DK_Date;import java.util.Scanner;public class DateUI { private DK_Date date;
Scanner scanner = new Scanner(System.in); public void initial() {
date = new DK_Date();
date.getCurDate();
date.getWeek(date.Year, date.Month);
date.getDays(date.Month, date.Year);
} public void show() {
System.out.println("◆◇◆◇◆◇ DK 万年历 ◆◇◆◇◆◇\n");
System.out.println("北京时间:" + date.Year + "年" + date.Month + "月"
+ date.Day + "日\n");
getShow(date.Week, date.Days);
while (true) {
System.out.println("\n请输入年份:");
date.Year = scanner.nextInt();
System.out.println("请输入月份:");
date.Month = scanner.nextInt();
date.getWeek(date.Year, date.Month);
date.getDays(date.Month, date.Year);
getShow(date.Week, date.Days);
}
} public void getShow(int week, int days) {
System.out.println("周日\t周一\t周二\t周三\t周四\t周五\t周六\t");
if (week != 7) {
for (int i = 0; i < week; i++) {
System.out.print("\t");
}
}
for (int i = 1; i <= days; i++) {
System.out.print(i + "\t");
if (i % 7 == 7 - week) {
System.out.println();
}
}
}
}package DK_Date;public class Start { public static void main(String[] args)
{
DateUI date = new DateUI();
date.initial();
date.show();
}
}
package cal;import java.awt.BorderLayout;
import java.awt.EventQueue;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Calendar;
import java.util.GregorianCalendar;public class CalenderTest extends JFrame { /**
*
*/
private static final long serialVersionUID = 1L;
private JPanel contentPane;
GregorianCalendar gre = new GregorianCalendar();
JLabel labels[][] = new JLabel[6][7];
int month = gre.get(Calendar.MONTH);
int year = gre.get(Calendar.YEAR);
int first = gre.get(Calendar.DAY_OF_MONTH);
//String [] monthDay={"31","28","31","30","31","30","31","31","30","31","30","31"};
int[] monthDay={31,28,31,30,31,30,31,31,30,31,30,31};
JLabel label1 = new JLabel("\u65E5\u5386\uFF1A");
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CalenderTest frame = new CalenderTest();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
* Create the frame.
*/
public CalenderTest() {
this.setTitle("My Calender");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
BorderLayout layout = new BorderLayout(0, 0);
layout.setHgap(10);
contentPane.setLayout(layout);
setContentPane(contentPane);
{
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.NORTH);
{
JButton button = new JButton("\u4E0A\u6708");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(month==0){
year--;
month = 11;
}
else{
month--;
}
label1.setText("\u65E5\u5386\uFF1A"+year+"年"+(month+1)+"月");
// System.out.println(year+" "+(month+1));
gre.set(GregorianCalendar.YEAR,year);
gre.set(GregorianCalendar.MONTH, month);
for(int i = 0;i <labels.length; i++){
for(int j = 0;j<labels[i].length;j++){
labels[i][j].setText("");
}
}
init();
}
});
panel.add(button);
}
{
JButton button = new JButton("\u4E0B\u6708");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(month==11){
year++;
month = 0;
}
else
{
month++;
}
label1.setText("\u65E5\u5386\uFF1A"+year+"年"+(month+1)+"月");
for(int i = 0;i <labels.length; i++){
for(int j = 0;j<labels[i].length;j++){
labels[i][j].setText("");
}
}
gre.set(GregorianCalendar.YEAR,year);
gre.set(GregorianCalendar.MONTH, month);
init();
} });
panel.add(button);
}
}
{
JLabel label = new JLabel("");
contentPane.add(label, BorderLayout.WEST);
}
{
JLabel label = new JLabel("");
contentPane.add(label, BorderLayout.EAST);
}
{
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
panel.setLayout(new GridLayout(7, 7, 0, 0));
{
JLabel label = new JLabel("\u65E5");
label.setBackground(Color.GRAY);
panel.add(label);
}
{
JLabel label = new JLabel("\u4E00");
label.setBackground(Color.GRAY);
panel.add(label);
}
{
JLabel label = new JLabel("\u4E8C");
label.setBackground(Color.GRAY);
panel.add(label);
}
{
JLabel label = new JLabel("\u4E09");
label.setBackground(Color.GRAY);
panel.add(label);
}
{
JLabel label = new JLabel("\u56DB");
label.setBackground(Color.GRAY);
panel.add(label);
}
{
JLabel label = new JLabel("\u4E94");
label.setBackground(Color.GRAY);
panel.add(label);
}
{
JLabel label = new JLabel("\u516D");
label.setBackground(Color.GRAY);
panel.add(label);
}
for(int i = 0;i<labels.length; i++){
for(int j = 0;j<labels[i].length; j++){
labels[i][j] = new JLabel();
labels[i][j].setBackground(Color.white);
labels[i][j].setOpaque(true);
panel.add(labels[i][j]);
}
}
init();
}
{
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.SOUTH);
{
label1.setText("\u65E5\u5386\uFF1A"+year+"年"+(month+1)+"月");
panel.add(label1);
}
} } public void init(){
int temMonth = month;
gre.set(Calendar.DAY_OF_MONTH,1);
int days = monthDay[temMonth];
gre.set(Calendar.YEAR,year);
boolean isYear = gre.isLeapYear(year);
if(isYear&&temMonth==1){
days=29;
}
int tem =gre.get(Calendar.DAY_OF_WEEK) ;
if(tem==1){
tem=8;
}
boolean flag = true;
String str = " ";
int day = 0;
for(int i = 0; i<labels.length; i++){
for(int j = 0; j<labels[i].length; j++){
if(flag){
while(j<(tem-1)){
labels[i][j].setText(str);
j++;
flag = false;
}
j--;
}
else if(day<days){
str = Integer.toString(day+1);
labels[i][j].setText(str);
day++;
}
}
}
}
}