扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
按照你的要求编写的Java日历验证程序如下
创新互联建站主营衡阳网站建设的网络公司,主营网站建设方案,重庆App定制开发,衡阳h5成都微信小程序搭建,衡阳网站营销推广欢迎衡阳等地区企业咨询
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.");
return;
}
if(month1 || month12){
UI.println("The month is not a valid number.");
return;
}
int monthDay=0;
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:monthDay=31;break;
case 4:
case 6:
case 9:
case 11:monthDay=30;break;
case 2:
if((year%4==0 year%100!=0) || year%400==0){
monthDay=29;
}else{
monthDay=28;
}
break;
}
if(day1 || daymonthDay){
UI.println("The day is not a valid number.");
return;
}else{
UI.println("It is "+day+"/"+month+"/"+year+".");
}
}
public static void main(String[] args) {
new EE().validateDateCore();
}
}
运行结果
首先,控制台输入肯定要是形如2013-03-06这样的格式,这是SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD")所要求的。输入2013-03会进入异常处理提示输入格式不正确。至于打印日历,你可以算出该月的第一号是星期几,然后按顺序排下去,满7天换行就是了
随便做了一个,其实一楼网友说的判断哪些30天,是否闰年什么的没必要,看代码:
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 static final int YEAR_RANGE = 50; // 年份范围,即往前往后各推多少年
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() {
setVisible(true);
setSize(600, 450);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 主面板
contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setBackground(Color.WHITE);
// 顶部选择日期和月份的区域
topPane = new JPanel(new FlowLayout(FlowLayout.CENTER, 50, 0)); // 居中对齐,控件间隔50px
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));
// 星期条
bottomTopPane = new JPanel(new GridLayout(1, 7));
bottomTopPane.setBackground(new Color(0x55, 0x55, 0x55));
// 日期列表
mainPane = new JPanel();
mainPane.setLayout(new GridLayout(0, 7)); // 列数为7,行数自动填充
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);
// 年份范围为往前往后各推50年
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); // 默认选中当前年份
String months[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"};
// 月份下拉列表
monthBox = new JComboBox(months);
monthBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(ItemEvent.SELECTED == e.getStateChange()) {
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) { // 若未初始化则返回,避免设置默认年月时调用此方法出错
return;
}
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;
// 重新初始化为本月第一天
cal.set(Calendar.MONTH, month - 1);
cal.set(Calendar.DATE, 1);
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 ++) {
cal.add(Calendar.DATE, 1);
int date = cal.get(Calendar.DATE);
mainPane.add(createDate(Integer.toString(date), DATE_GRAY));
}
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);
Font font = new Font("Arial", Font.BOLD, 30);
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.setBorder(new EmptyBorder(5, 5, 5, 5));
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);
}
}
import java.util.Scanner; public class Wan{ public static void main(String[] args){ Scanner name = new Scanner(System.in); System.out.print("请输入要查询的年份:"); int year = name.nextInt(); System.out.print("请输入该年的月份"); int month = name.nextInt(); } //累加 该年至输入的月份 天数 //比如 输入2009年的 3月分 // 那就累加 2009年的1月至 3月1号的总天数 public void sumDay(int year,int month){ int day = 0; int sumDay = 0; for(int i = 1;i=month;i++){ switch(i){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: day = 31; break; case 2: if(year % 4 == 0 || year % 400 == 0 year %100!=0){ day = 29; }else{ day = 28; } break; default: day = 30; } //最后一个月份不要累加 因为我们只是要算到该月的一号就可以了 if(i month){ sumDay += day; } } //累加 2000年到该年的一月一号天数 for(int i = 2000;iyear;i++){ if( i % 4 == 0 || i %400== 0 i % 100 != 0){ sumDay += 366; }else{ sumDay += 365; } } //求该月一号为星期几 int week = sumDay % 7 +1; if(week == 7){ week = 0; } } public void fomatDate(int week,int day){ int g = 0; for(int i = 0;iweek;i++){ System.out.print("\t"); } for(int i = 1;i=day;i++){ System.out.print(i+"\t"); g = week + i; if(g % 7 == 0){ System.out.println(); } } } } 给点分哈 写得好累
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流