Date类 DateFormat类 Calandar类)


我们工作学习涉及的时间相关类有如下这些
在这里插入图片描述

测试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
    }
}

Date测试输出

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

DateFormat测试输出
代码中的格式化字符的具体含义表
代码中的格式化字符的具体含义表

测试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天

        }
    }
}

效果图
在这里插入图片描述

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值