本文目錄一覽:
- 1、Java中日曆類(CalendarClass)的用途?
- 2、Java中解釋一些日曆類(CalendarClass)中的重要方法?
- 3、如何用JAVA寫日曆?
- 4、java如何在窗口中顯示日曆
- 5、java編寫日曆
- 6、關於java中輸出日曆
Java中日曆類(CalendarClass)的用途?
Java中日曆類(Calendar類)的用途如下:
Calendar類的靜態方法getInstance()可以初始化一個日曆對象:Calendar now = Calendar.getInstance();
可以使用下面三個方法把日曆定到任何一個時間:
set(int year ,int month,int date) ;
set(int year ,int month,int date,int hour,int minute) ;
set(int year ,int month,int date,int hour,int minute,int second) ;
如果想獲得年份、月份、小時等信息可以使用:
Now.get(Calendar.Month);//這樣的方法 0表示一月,1表示二月
get(Calendar.DAY_OF_MONTH);//獲得這個月的第幾天
get(Calendar.DAY_OF_WEEK);//獲得這個星期的第幾天
get(Calendar.DAY_OF_YEAR);//獲得這個年的第幾天
getTimeMillis();//獲得當前時間的毫秒表示
1.計算某一月份的最大天數
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);
time.set(Calendar.MONTH,i-1);//注意,Calendar對象默認一月為0
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數
註:在使用set方法之前,必須先clear一下,否則很多信息會繼承自系統當前時間
2.Calendar和Date的轉化
(1) Calendar轉化為Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date轉化為Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
3.格式化輸出日期時間
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
System.out.println(df.format(date));
4.計算相隔天數的方法
public int getDaysBetween (Calendar d1, Calendar d2){
if (d1.after(d2)){ // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) – d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2){
d1 = (Calendar) d1.clone();
do{
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到當年的實際天數
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
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如何在窗口中顯示日曆
MainFrame.java是顯示日曆程序,Clock.java是日曆計算程序(可以不要)。
編譯後運行MainFrame這個類即可。
swing窗口顯示萬年曆,jdk1.4以上環境編譯運行。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 package org.test;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 = -306484324260972141L; 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, 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(); }}
12345678910111213141516171819202122232425262728293031323334353637383940414243 package org.test;import java.awt.Color;import java.util.Calendar;import java.awt.Canvas;import java.awt.Font;import java.awt.Graphics;import java.text.SimpleDateFormat;public 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編寫日曆
我給你貼上我在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中輸出日曆
第一句將用戶輸入的數字設為日曆對象的「年」成員變量,第二句和第三句同樣,一個是月份,一個是按照每月第一天開始的日期,第四句用於取得一個默認的日曆對象。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/248978.html