JAVA进阶(九)时间处理类
前言
前面学些了可变字符序列StringBuilder以及StringBuffer类,本章将继续学习常用类事件处理类
范例
1.时间的概念
在java中,我们用long类型数据表示每一个时刻的时间,单位为毫秒,以1970年1月1日 00:00:00为基点进行计算。
如果表示现在的时刻,则可以用long currTime = System.currentTimeMillis();获取当前时间值。
2.Date类
该类位于java.util包下,需要显示引入指定类。
(1)构造方法,我们可以看到,只有两个构造方法在用,一般推荐使用Calendar类
(2)常用方法(大部分方法已经过时,推荐使用Calendar类)
- public boolean after(Date when):判断时间是否在指定时间when之后
- public boolean before(Date when):判断时间是否在指定时间when之前
3.SimpleDateFormat类
该类位于java.text包下,需要显示的引用才能够使用。该类用来对时间进行格式化处理,提供字符串形式和时间格式的相互转化
(1)构造方法(一般用第二个)
(2)pattern的概念
pattern即模式,表示时间一般用形如yyyy-MM-dd HH:mm:ss的形式表示模式,当然还有其他模式,模式字符集如下:
(3)常用方法
- public final String format(Date date):将一个Date类型转化为String
- public Date parse(String source):将String类型的时间转化为Date
4.Calendar类
该类位于java.util包下,需要显式的引用该类才能使用。
(1)常量
该类拥有诸多常量,如DATE、YEAR、DAY_OF_WEEK等等,这些常量类的内容请读者自行查询API文档进行了解
(2)常用方法
- public static Calendar getInstance();由于Calendar为抽象类,无法实例化,需通过该方法返回一个子类实例化对象
- public void add(int field,int amount):指定时间新增几日,几月,几年等等
- public int get(int field):返回指定时间的年、月、日等等数值
- public void set(int field,int value):设置指定年、月、日等等
- public final void setTime(Date date):将Date类型的数据设置进Calendar对象
- public final Date getTime();将Calendar对象转化为Date对象
其他方法请读者自行阅读API进行深入的理解。
小程序:编写java代码构建日历,将用户输入的日期,以*的标记进行显示
示例代码如下:
package com.jwang.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
* 日历交互小程序
* @author jwang
*
*/
public class Test{
public static void main(String[] args) throws ParseException {
Scanner scan = new Scanner(System.in);
System.out.println("请输入日期(格式为yyyy-MM-dd):");
String dateStr = scan.nextLine();
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
//获取当前时间
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//获取当前日期
int day = cal.get(Calendar.DAY_OF_MONTH);
//获取当前月份的天数
int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
//打印日历表头
System.out.println("===================="+cal.get(Calendar.YEAR)+"年"
+(cal.get(Calendar.MONDAY)+1)+"月====================");
System.out.println("一\t二\t三\t四\t五\t六\t日\t");
//判断当月1日是星期几
cal.set(Calendar.DAY_OF_MONTH, 1);
//星期日为1,星期一是2...以此类推
int weekDay = cal.get(Calendar.DAY_OF_WEEK);
for (int i = 1; i < weekDay-1; i++) {
System.out.print("\t");
}
for (int i = 1; i <= maxDay; i++) {
//判断是否是当前日期
if(cal.get(Calendar.DAY_OF_MONTH) == day){
System.out.print(cal.get(Calendar.DAY_OF_MONTH)+"*\t");
}else {
System.out.print(cal.get(Calendar.DAY_OF_MONTH)+"\t");
}
//如果是星期日则换行
if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
System.out.println();
}
cal.add(Calendar.DATE, 1);
}
//关闭资源
scan.close();
}
}