简单可视化日历实现
前述:简单作为了解日历类的小练习。
核心内容
- DateFormate和SimpleDateFormate的使用——时间与字符串的相互转换。
- Calendar与GregorianCalendar的使用——日期计算。
Calendar类中的常量含义:
- YEAR(年份)
- MONTH(月份从0开始,11结束,共12个月)
- ATE(一月的某天)
- HOUR(指示上午或下午的小时)
- HOUR_F_DAY(指示一天中的小时)
- DAY_OF_WEEK (一个星期中的某天)
- DAY_OF_MONTH(一个月中的某天)
- DAY_OF_YEAR(一年中的某天)
- DAY_OF_WEEK _IN_MONTH(一个月中的第几个星期)
- WEEK_OF_MONTH (指示当前月中的星期数)
- WEEK_OF_YEAR(指示当前年中的星期数)
获得Calendar类对象方法:
- 通过日历类的静态方法获得对象 Calendar c1 = Calendar.getInstance();
- 通过子类获得对象
Calendar c2 = new GregorianCalendar();
Calendar类中的一些方法:
- void set(int field,int value)//field日历类的参数
- void set(int year,int month,int date)//设置年月日
- void set(int year, int month, int date, int hourOfDay, int minute, int second)//设置年月日时分秒
- void setTime(Date date);//使用给定的 Date 设置此 Calendar 的时间
- int get(int field)//返回给定日历字段的值
- void add(int field,amont);//为给定的日历字段添加指定的时间
Date转化成指定的日期格式:
SimpleDateFormat df1=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); SimpleDateFormat df2=new SimpleDateFormat("yy/MM/dd HH:mm"); SimpleDateFormat df3=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等价于now.toLocaleString() SimpleDateFormat df4=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E "); SimpleDateFormat df5=new SimpleDateFormat("一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区"); Date now=new Date(); System.out.println(df1.format(now)); System.out.println(df2.format(now)); System.out.println(df3.format(now)); System.out.println(df4.format(now)); System.out.println(df5.format(now)); System.out.println(now.toString());
- 得到得结果:
2019年05月20日 00时47分17秒
19/05/20 00:47
2019-05-20 00:47:17
2019年05月20日 00时47分17秒 周一
一年中的第 140 天 一年中第21个星期 一月中第4个星期 在一天中24时 CST时区
Mon May 20 00:47:17 CST 2019
把给定的字符串中的日期提取为Date
String str = "2019-05-20 00:52:30.345" ;
// 第一种格式
String str1 = "yyyy-MM-dd HH:mm:ss.SSS" ;
// 第二种格式
String str2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒" ;
SimpleDateFormat df1 = new SimpleDateFormat(str1) ;
SimpleDateFormat df2 = new SimpleDateFormat(str2) ;
Date d = null ;
try{
//从字符串中提取出日期数字
d = df1.parse(str) ;
}catch(Exception e){
e.printStackTrace() ;
}
System.out.println(d);
//将提取后的日期数字变为指定的格式
System.out.println(df1.format(d));
System.out.println(df2.format(d)) ;
- 最终得到结果为:
Mon May 20 00:52:30 CST 2019
2019-05-20 00:52:30.345
2019年05月20日 00时52分30秒345毫秒
日历实现代码
package cm.stx.calendar;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class TestCalendar {
public static void main(String[] args) {
//从键盘输入查询日期
System.out.println("请输入日期(格式:2019-05-20):");
Scanner input = new Scanner(System.in);
//设置日期格式
DateFormat df = new SimpleDateFormat("yyyy-mm-dd");
Date date = null;
try {
//将字符串转换为日期
date = df.parse(input.nextLine());
} catch (ParseException e) {
e.printStackTrace();
}
//默认当前时刻,获得日历类对象
Calendar c = new GregorianCalendar();
//设置输入日期
c.setTime(date);
int dayInput = c.get(Calendar.DAY_OF_MONTH);
int days = c.getActualMaximum(Calendar.DATE);
System.out.println("一\t二\t三\t四\t五\t六\t日");
c.set(Calendar.DAY_OF_MONTH, 1);
for(int i=1;i<c.get(Calendar.DAY_OF_WEEK);i++) {
System.out.print("\t");
}
for(int j=1;j<days;j++) {
if(dayInput == c.get(Calendar.DAY_OF_MONTH)) {
System.out.print(c.get(Calendar.DAY_OF_MONTH) +"*\t");
}else {
System.out.print(c.get(Calendar.DAY_OF_MONTH) +"\t");
}
if(c.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY) { System.out.println(); }
c.add(Calendar.DAY_OF_MONTH, 1);
}
}
}