「java日历详解」日历代码java

博主:adminadmin 2023-01-09 00:00:11 718

今天给各位分享java日历详解的知识,其中也会对日历代码java进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

怎么用java写日历

以下是两个类,请楼主分别存成两个java文件:

其中

MainFrame.java是显示日历程序,Clock.java是日历计算程序。编译后运行MainFrame这个类即可。

1.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();

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();

}

}

2.Clock.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;

//显示时间的类:Clock

/** *//**

* 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);

}

}

java程序关于日历代码的解读

类CalendarPrinter有两个主要的方法printCal()和printOut(),printCal()打印你输入年份的每一个月份,printOut()打印每一个月的每一天,在printCal()方法先创建一个格里高利历法的对象,并把你输入的年份设置为该历法的年份,然后for循环打印12个月份,然后再把每个月分别设置为你输入那年的每个月,接着调用printOut()方法打印每一天,在printOut()方法中,先获得月份,然后把日期设置为该月的第一天,接着在获取这月的第一天是一周中的周几weekday,然后打印出第一行“Sun MOn Tue Wed Thu Fri Sat”,接着就进入for循环,这个for循环就是打印每个月第一天开始前的空格,接着就进入do……while循环,获得天day,如果day10,打印day的时候day前面的空格大一些,否则day前面的空格就小一些,为了排版好看,然后判断是否是周六,如果是周六就换行,然后把day+1,重新获得新的day在一周中是周几。循环一直下去,该月的天从1一直加到30或31,再加的话月份就该+1,所以do……while循环结束的条件就是进入到下一个月。最后判断该月的最后一天是不是该月的周日,如果不是就换行

java编写日历

我给你贴上我在java核心技术中看到的代码吧,当然没有输入年份和月份,是按照当前时间创建的,写有我写的注释,应该能看的懂

/*

* 2012年5月13日10:37:58

* 日历程序

* Function:

* 显示当前月份的日历

* 总结

* 1. 0-11分别代表1-12月

* 1-7分别代表周日-周六

* 2. 使用GregorianCalendar对象的get方法(参数)获取月,日,年等信息

* 3.

*/

import java.text.DateFormatSymbols;

import java.util.*;

public class CalendarTest {

public static void main(String[] args) {

//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 weekDay = d.get(Calendar.DAY_OF_WEEK); //获取当天位于本星期的第几天,也就确定了星期几,值的范围是1-7

int firstDayOfWeek = d.getFirstDayOfWeek(); //获取一星期的第一天,我们得到的是Calendar.SUNDAY,因为我们一星期的第一天是周日

int indent = 0; //为了定位本月第一天,定义索引

while (weekDay != firstDayOfWeek) {

//注意,月份用0-11代表1-12月,为了清晰起见,使用常量代替,下面获取月份得到的实际是当前月-1的值,所以我们要加1

//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();//获取简短形式的星期字符串数组

//System.out.println(weekDayNames.length);getShortWeekdays()得到的数组的长度是8,下标为0的是没有值1为星期日...7为星期六

//注释代码1

//Java核心技术的代码

/*

do {

//System.out.printf("%4s", weekDayNames[weekDay]); //经过上面定义索引,weekDay代表的是本星期日

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.printf("%3s\t", weekDayNames[i]);//引号内是一个全角的空格,因为是中文版,不是书上英文环境,中文和空格对于不上,这里我们用\t解决

//System.out.printf("%3s ", weekDayNames[i]); //方式2

System.out.println();//换行

for (int i=1; i=indent; i++)//确定一星期的一天位置,利用上面indent

System.out.printf("\t");//如用方式2,则这里内容是四个全角空格

//实现输出日期

d.set(Calendar.MONTH, month);

d.set(Calendar.DAY_OF_MONTH, 1);

do {

//print day

int day = d.get(Calendar.DAY_OF_MONTH);

System.out.printf("%3d", day);

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);

}

}

关于JAVA中calendar.get(Calendar.Year)的问题

一:字段和方法的信息

YEAR 字段:

public static final int YEAR ;

指示年的 get 和 set 的字段数字。这是一个特定于日历的值;

get 方法:

public int get(int field) ;

返回给定日历字段的值。在 lenient 模式下,所有日历字段都被标准化。在 non-lenient 模式下,所有日历字段都是经过验证的,如果任何日历字段有超出范围的值,则此方法抛出一个异常。标准化和验证都是通过 complete() 方法处理的,这个过程与日历系统有关。

参数:field - 给定的日历字段。

返回:给定日历字段的值。

抛出:ArrayIndexOutOfBoundsException - 如果指定字段超出范围 (field 0 || field = FIELD_COUNT)。

详细资料可以参考JDK API的java.util.Calendar

二:Calendar 类详解

Calendar 类是一个抽象类,它为特定时间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

1、使用Calendar类别之前,要先知道Calendar的一些方法取回的数字是对应于Calendar本身的常数,也就是说并不是取回1 这个数字,就表示今天是星期一。

a、想要取得时间,首先使用Calendar的getInstance()取得一个Calendar的实例,例如:

Calendar rightNow = Calendar.getInstance();

b、如果现在您想知道是几年,则可以使用get()方法并指定常数,例如:

System.out.println(rightNow.get(Calendar.YEAR));

c、如果是2005年,则上例会显示2005的数字,依照这个例子,假设撰写本文的时间是5月份,而现在想使用程式取得月份,则下例可能会有些困惑:

System.out.println(rightNow.get(Calendar.MONTH));

d、程式会显示4这个数字,而不是预期的5,因为传回的4并不是代表月份,而是对应于Calendar.MAY常数的值, Calendar在月份上的常数值从Calendar.JANUARY开始是0,到Calendar.DECEMBER的11,所以如果想要显示传回值的真正意涵,可以如下撰写:

String[] months = {"一月", "二月", "三月", "四月","五月", "六月", "七月", "八月","九月", "十月", "十一月", "十二月"};

Calendar rightNow = Calendar.getInstance();

System.out.println(months[rightNow.get(Calendar.MONTH)]);

2、初始值

代码如下,值得指出的是由于我们的时区设置是GMT+8,所以打印格林威治时间得到的是1970-01-01 08:00:00.

Calendar cal = Calendar.getInstance();//得到当前时间

cal.setTimeInMillis(0);//转换成格林威治时间

3、获取值

cal.get(Calendar.YEAR);//年

cal.get(Calendar.MONTH) + 1;//月(必须要+1)

cal.get(Calendar.DATE);//日

cal.get(Calendar.HOUR_OF_DAY);//时

cal.get(Calendar.MINUTE);//分

cal.get(Calendar.SECOND);//秒

cal.get(Calendar.DAY_OF_WEEK);//星期(Locale.ENGLISH情况下,周日是1,剩下自己推算)

如果拿时间不是为了计算而是展示出来,肯定用SimpleDateFormart了,模式为yyyy-MM-dd HH:mm:ss

4、设置值

cal.set(2013, 5, 4, 13, 44, 51);//年月日时分秒(月份0代表1月)

cal.set(Calendar.YEAR, 2014);//年

cal.set(Calendar.MONTH, 7);//月(月份0代表1月)

cal.set(Calendar.DATE, 11);//日

cal.set(Calendar.HOUR_OF_DAY, 15);//时

cal.set(Calendar.MINUTE, 33);//分

cal.set(Calendar.SECOND, 32);//秒

5、运算值

cal.add(Calendar.YEAR, 1);//年

cal.add(Calendar.MONTH, 1);//月

cal.add(Calendar.DATE, 1);//日

cal.add(Calendar.HOUR_OF_DAY, -1);//时

cal.add(Calendar.MINUTE, 1);//分

cal.add(Calendar.SECOND, 1);//秒

cal.add(Calendar.DATE, 7);//周

Java中解释一些日历类(CalendarClass)中的重要方法?

Calendar类(理解)

Calendar类是采用手工的方式取得日期,可以通过此类精确到毫秒,此类的定义如下:

public abstract class Calendar extends Object

implements Serializable, Cloneable, ComparableCalendar

这个类本身是一个抽象类,抽象类要想实例化肯定使用子类:GregorianCalendar

package org.lxh.api.datedemo;

import java.util.Calendar;

import java.util.GregorianCalendar;

public class CalendarDemo {

public static void main(String[] args) {

Calendar calendar = new GregorianCalendar();

System.out.println("YEAR: " + calendar.get(Calendar.YEAR));

System.out.println("MONTH: " + (calendar.get(Calendar.MONTH) + 1));

System.out.println("DATE: " + calendar.get(Calendar.DATE));

System.out

.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));

System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));

System.out.println("SECOND: " + calendar.get(Calendar.SECOND));

System.out

.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));

}

}

但是现在有一个问题,如果每次取时间都按照这种方式取的话,那么得累死,那么能不能设计一个类,可以通过此

类直接取得时间呢,例如:现在给出了如下的一个接口:

package org.lxh.api.datedemo;

public interface DateTime {

/**

*取得日期

* @return 日期的字符串,例如:2009-12-22

*/

public String getDate() ;

/**

*取得日期时间

* @return 日期时间的字符串,例如:2009-12-22 11:06:23.345

*/

public String getDateTime() ;

/**

*取得时间戳

* @return 返回时间戳的字符串,例如:20091222110623345

*/

public String getTimeStamp() ;

}

前面需要补0的问题需要注意,例如:01。

package org.lxh.api.datedemo;

import java.util.Calendar;

import java.util.GregorianCalendar;

public class DateTimeImpl implements DateTime {

private Calendar calendar;

public DateTimeImpl() {

this.calendar = new GregorianCalendar();

}

public String getDate() {

StringBuffer buf = new StringBuffer();

buf.append(calendar.get(Calendar.YEAR)).append("-");

buf.append(this.addZero((calendar.get(Calendar.MONTH) + 1), 2)).append("-");

buf.append(this.addZero(calendar.get(Calendar.DATE), 2));

return buf.toString();

}

public String getDateTime() {

StringBuffer buf = new StringBuffer();

buf.append(calendar.get(Calendar.YEAR)).append("-");

buf.append(this.addZero((calendar.get(Calendar.MONTH) + 1), 2)).append("-");

buf.append(this.addZero(calendar.get(Calendar.DATE), 2)).append(" ");

buf.append(this.addZero(calendar.get(Calendar.HOUR_OF_DAY), 2)).append(":") ;

buf.append(this.addZero(calendar.get(Calendar.MINUTE), 2)).append(":") ;

buf.append(this.addZero(calendar.get(Calendar.SECOND), 2)).append(".") ;

buf.append(this.addZero(calendar.get(Calendar.MILLISECOND), 3)) ;

return buf.toString();

}

@Override

public String getTimeStamp() {

StringBuffer buf = new StringBuffer();

buf.append(calendar.get(Calendar.YEAR));

buf.append(this.addZero((calendar.get(Calendar.MONTH) + 1), 2));

buf.append(this.addZero(calendar.get(Calendar.DATE), 2));

buf.append(this.addZero(calendar.get(Calendar.HOUR_OF_DAY), 2));

buf.append(this.addZero(calendar.get(Calendar.MINUTE), 2)) ;

buf.append(this.addZero(calendar.get(Calendar.SECOND), 2)) ;

buf.append(this.addZero(calendar.get(Calendar.MILLISECOND), 3)) ;

return buf.toString();

}

private String addZero(int num, int len) {

StringBuffer buf = new StringBuffer();

buf.append(num);

while (buf.length() len) {

buf.insert(0, 0);

}

return buf.toString();

}

}

如何用JAVA写日历?

按照你的要求编写的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.");

   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();

 }

}

运行结果

java日历详解的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于日历代码java、java日历详解的信息别忘了在本站进行查找喔。