Date类 DateFormat类 Calandar类
我们工作学习涉及的时间相关类有如下这些
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210509110144805.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MzMwODYxOA==,size_16,color_FFFFFF,t_70)
测试Date类的常用方法
1.在标准java类库中包含一个Date类,它的对象表示一个特定的瞬间,精确到毫秒
2.构造方法
public Date() 分配Date对象并初始化此对象,以表示分配它系统的时间
public Date(long date) 分配Date对象并初始化对象,并表示自从标准基准时间,即1970 年 1 月 1 日 00:00:00 GMT以来的指定毫秒数
3.成员方法
方法 | 含义 |
---|---|
d.after( d1) | 测试d日期是否在d1日期之后 |
d.before(d1) | 测试d日期是否在d1日期之前 |
d.compareTo(d1) | 比较两个日期的顺序,如果等于d1,则返回值0,如果d在d1之前,则返回小于0的值,反之则·返回大于0的值 |
d.equals(d1) | 比较两个日期的相等性,当且仅当参数不为null并且是一个表示与此对象相同的时间点(精确到毫秒),结果才为true |
d1.getTime() | 返回自1970年1月1日00:00:00GMT以来此Date对象表示的毫秒数 |
d.toString() | 把此对象转换成以下形式的String:dow mon dd hh:mm:ss zzz yyyy |
dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
mon 是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。
dd 是一月中的某一天(01 至 31),显示为两位十进制数。
hh 是一天中的小时(00 至 23),显示为两位十进制数。
mm 是小时中的分钟(00 至 59),显示为两位十进制数。
ss 是分钟中的秒数(00 至 61),显示为两位十进制数。
zzz 是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。如果不提供时区信息,则 zzz 为空,即根本不包括任何字符。
yyyy 是年份,显示为 4 位十进制数。
借鉴文章地址(https://blog.csdn.net/qq_27501261/article/details/79423886)
package UsualClass;
/**
* 测试Date类的常用方法
*/
import javax.xml.crypto.Data;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
Date d=new Date();//分配Date对象并初始化此对象,以表示分配它系统的时间
System.out.println(d);//当前系统的时间
Date d1=new Date(1235889999);//分配Date对象并初始化对象,并表示自从标准基准时间,即1970 年 1 月 1 日 00:00:00 GMT以来的指定毫秒数
System.out.println(d1);//打印结果为1970年8月1日,不是一月,可能是因为时区问题导致
System.out.println(d.after(d1));//测试d日期是否在d1日期之后
System.out.println(d.before(d1));//测试d日期是否在d1日期之前
System.out.println(d.compareTo(d1));//比较两个日期的顺序,如果等于d1,则返回值0,如果d在d1之前,则返回小于0的值,反之则·返回大于0的值
System.out.println(d.equals(d1));//比较两个日期的相等性,当且仅当参数不为null并且是一个表示与此对象相同的时间点(精确到毫秒),结果才为true
System.out.println(d1.getTime());//返回自1970年1月1日00:00:00GMT以来此Date对象表示的毫秒数
System.out.println(d.toString());//把此对象转换成以下形式的String:dow mon dd hh:mm:ss zzz yyyy
}
}
DateFormat类:测试时间对象和字符串之间的相互转换
1.DateFormat是一个抽象类,一般使用它的子类SimpleDateFormat类来实现
2.创建SimpleDateFormat对象中需读取的指定字符串的特殊标记(如yyyy,MM等)不可以改变,其他的可以改变 ,例如yyyy-MM-dd,也可以写成yyyy年MM月dd日
3.format方法,将Date类时间对象按照指定的字符串格式转成相应的字符串,具体操作见代码
4.parse方法, 把字符串按照格式字符串指定的格式转成相应的时间,具体操作见代码,注意使用parse方法时可能会有报错,作为一名小白 我直接按提示抛出
package UsualClass;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import java.text.ParseException;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
/**
* 测试时间对象和字符串之间的互相转换
*/
//DateFormat是一个抽象类,一般使用它的子类SimpleDateFormat类来实现
public class TestDateFormat {
public static void main(String[] args) throws ParseException {
DateFormat df=new SimpleDateFormat("yyyy-MM-dd ");
。 /**
* 把时间对象按照“格式字符串指定的格式”转成相应的字符串
*/
SimpleDateFormat df1=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//创建一个SimpleDateFormat对象,并告知它要读取的字符串格式
//字符串的特殊标记yyyy不能变。其他的如-,:都可以改变
Date date=new Date();//读取系统当前时间
String str=df1.format(date);//将当前时间按df1字符串格式写出
System.out.println(str);
/**
* 把字符串按照“格式字符串指定的格式”转成相应的时间
*/
SimpleDateFormat df2=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date data1=df2.parse("2021-5-8 18:58:00");
System.out.println(data1);
//测试其他格式字符
SimpleDateFormat df3=new SimpleDateFormat("D");
String str1=df3.format(new Date());
System.out.println(str1);
}
}
代码中的格式化字符的具体含义表
测试Calendar类以及Calendar类的常用操作
1.Calendar是一个抽象类,提供了日期计算的的相关功能
GregorianCalendar时Calendar的一个具体的子类,提供了世界上大多数国家和地区的标准日历系统
2, 0-11表示对于的月份,0代表一月,以此类推11代表十二月
3. 1-7表示每周的周几,1表示周日,2表示周一,以此类推,7表示周六
4.Calendar经常使用常量来表示月份(ANUARY、FEBRUARY等等。)和周几(SATURDAY等)
5.创建GregorianCalendar类对象初始化设置时间顺序为yyyy,MM,dd,hh, mm ,ss。 如果不初始化设置时间,则默认为系统当前时间
6.相关方法操作
|
方法名 | 含义 |
---|---|
get | 获取时间 |
set | 设置或更改时间 |
add | 增加时间 |
public Date getTime() | 把日历对象转换为时间对象 |
public Calendar setTime() | 把时间对象转换为日历对象 |
详细操作可看这位大佬博主的文章(https://blog.csdn.net/yx0628/article/details/79317440)
|Calendar类中提供很多成员常量,代表给定的日历字段:
字段值 | 含义 |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周几,周日为1,可以-1使用) |
具体操作请看代码
package UsualClass;
/**
* 测试Calendar类以及Calendar类的常用操作
*/
import Object_Oriented.CanShuConvey;
import jdk.nashorn.internal.parser.Scanner;
import java.util.Date;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.concurrent.Callable;
public class TestCalendar {
public static void main(String[] args) {
//获得日期的相关元素
GregorianCalendar calendar = new GregorianCalendar(2020, 5, 12, 18, 10, 00);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);//0-11表示对应的月份 0——一月...11——十二月
int weekday = calendar.get(Calendar.DAY_OF_WEEK);//星期几,1-7 1——星期日,2——星期一,6——星期六
int day = calendar.get(Calendar.DATE);//也可以使用;DAY_OF_MONTH
System.out.println("年份"+year);
System.out.println("月份"+month);
System.out.println("天的日期"+day);
System.out.println("周几"+weekday);
//设置日期的相关元素
Calendar c1=new GregorianCalendar();//如果不设置时间。则默认为当前的系统时间
System.out.println("c1的时间"+c1);
c1.set(Calendar.YEAR,9999);//将年份改成9999
System.out.println("c1改变后的时间"+c1);
//日期的计算
Calendar c2=new GregorianCalendar();//获取当前系统时间
System.out.println("c2的时间"+c2);
c2.add(Calendar.DATE,100);//将获取的时间天数增加100天
c2.add(Calendar.YEAR,100);//将获取的·时间年数增加100年
System.out.println("c2的改变后的时间"+c2);
//日历对象和时间对象的转换
Date date=c2.getTime();//把日历对象转换为时间对象
System.out.println(date);
Calendar c3=new GregorianCalendar();
c3.setTime(new Date());//把时间对象转换为日历对象
System.out.println(c3);
calendar(c3);
}
public static void calendar(Calendar c) {
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DATE);
int weekday = c.get(Calendar.DAY_OF_WEEK) - 1;
String[] str = {"日","一","二","三","四","五","六"};
String str1=str[weekday];
int hour=c.get(Calendar.HOUR);
int minute=c.get(Calendar.MINUTE);
int second=c.get(Calendar.SECOND);
System.out.println(year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒"+" 周"+str1);
}
}
测试输出
简单可视化日历程序
package UsualClass;
/**
* 简单可视化日历程序
*/
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.concurrent.Callable;
public class TestCalendar1 {
public static void main(String[] args) throws ParseException {
String str="2020-9-1";//获取到的时间
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");//
Date date=df.parse(str);//把获取到的字符串类时间转为时间对象
Calendar calendar=new GregorianCalendar();
calendar.setTime(date);//把时间对象转为日历对象
calendar.set(Calendar.DATE,1);//将获取的的时间day改为1
System.out.println("日\t一\t二\t三\t四\t五\t六");//打印表头
for(int j=1 ;j<calendar.get(Calendar.DAY_OF_WEEK);j++){
System.out.print("\t");//准确打印开头的第一个数的位置
}
int days=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
for(int i=1;i<=days;i++){
System.out.print(calendar.get(Calendar.DAY_OF_MONTH)+"\t");//打印时间的第几天
if(calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){//当时间的周几为周六时,自动换行
System.out.println();
}
calendar.add(Calendar.DAY_OF_MONTH,1);//每次循环时间加1天
}
}
}
效果图
简单可视化日历程序的优化
package UsualClass;
/**
* 可视化日历程序的优化
*/
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 TestCalendar2 {
public static void main(String[] args) throws ParseException {
System.out.println("请输入日期(格式为:2000-01-01):");
Scanner scanner=new Scanner(System.in);
String str =scanner.nextLine();
//String str = "2020-9-10";//获取到的时间
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");//
Date date = df.parse(str);//把获取到的字符串类时间转为时间对象
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);//把时间对象转为日历对象
System.out.println("日\t一\t二\t三\t四\t五\t六");//打印表头
int day=calendar.get(Calendar.DAY_OF_MONTH);
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,1);//将获取的日期day改为1
for (int j = 1; j < calendar.get(Calendar.DAY_OF_WEEK); j++) {
System.out.print("\t");//准确打印开头的第一个数的位置
}
for (int i = 1; i <= days; i++) {
System.out.print(calendar.get(Calendar.DAY_OF_MONTH));//打印时间的第几天
if(calendar.get(Calendar.DAY_OF_MONTH)==day){
System.out.print("*\t");
}else{
System.out.print("\t");
}
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {//当时间的周几为周六时,自动换行
System.out.println();
}
calendar.add(Calendar.DAY_OF_MONTH, 1);//每次循环时间加1天
}
}
}
效果图