Java学习30-常用类 Date类

Date类

  • java.util.Date
    
  • java.util.Calendar(日历)
    
  • java.text.SimpleDateFormat格式化时间类 yyyy-MM-dd HH:mm:ss
    

Date类的用法,类似新建对象,然后调用method
比如

Date x= new Date();
x.getYear();

注意要导入包
import java.util.Date
Date类可调用的方法:
getYear() 获取年( //常用+1900,因为从1900年开始算的)
getMonth() 获取月(//常用+1,因为从0开始计算的)
getDate() 获取日(重要!!!会得到一个Date类型的object)
getHours() 获取小时
getTime() 是获取时间戳(重要!!!会得到一个Date类型的object),详解如下:
getTime() java.util.Date 类的一个方法,用于获取日期对象表示的时间戳,返回的是毫秒形式。这个时间戳是自 1970 年 1 月 1 日 00:00:00 GMT(格林威治标准时间)以来经过的毫秒数。这个时间戳method可以用于比较日期对象之间的时间先后顺序,计算时间差等。

public class MyDateTest {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println(d); // 系统时间
        //get...()——获取年月日.....
        System.out.println(d.getYear()+1900); // 从1900年开始算的
        System.out.println(d.getMonth()+1); // 月份从0开始计算
        System.out.println(d.getDate()); // 天数
        System.out.println(d.getHours());// 小时

        //getTime()——获取时间戳,毫秒形式,返回的是long
        System.out.println(d.getTime());
    }
}

运行结果

Thu Feb 29 12:56:25 CST 2024
2024
2
29
12
1709182585127

注意:最后一行的时间戳1709182585127毫秒等于474772.94小时,约为19782.21 天,54.1978年,1970+54.1987=2024.1978年。符合上面秒描述的时间戳是计算自1970 年 1 月 1 日以来过去的毫秒数。

Calendar(日历)类
使用方法
Calendar x= Calendar.getInstance()
然后x.set(int年,int月...等)比如
x.get(Calendar.YEAR)
x.get(Calendar.MONTH) 注意!!!角标0-11代表1-12月
x.get(Calendar.DATE)
x.get(Calendar.HOUR) 注意!!!这是十二进制的时间
x.get(Calendar.MINUTE)
x.get(Calendar.SECOND)

package Math;
import java.util.Calendar;
import java.util.Date;
public class MyDateTest {
    public static void main(String[] args) {
        Date x= new Date();
        System.out.println(x.getYear());
        System.out.println(x.getMonth());
        System.out.println(x.getDate());
        System.out.println(x.getTime());
        System.out.println(x);
        System.out.println("=====================>");

        Calendar y= Calendar.getInstance();
        y.set(1999,12,1,1,1,1);
        System.out.println(y.get(Calendar.YEAR));
        System.out.println(y.get(Calendar.MONTH));//注意看结果:月份是从0开始的算的
        System.out.println(y.get(Calendar.DATE));
        System.out.println(y.get(Calendar.HOUR));
        System.out.println(y.get(Calendar.MINUTE));
        System.out.println(y.get(Calendar.SECOND));
        System.out.println("=====================>");

    }
}

124
1
29
1709197390692
Thu Feb 29 17:03:10 CST 2024
=====================>
2000
0 //注意看:刚才set的是1999/12月1日,为什么这里显示的是2000年1月1日了?因为Calendar的月份角标是0:11,共12个月
1
1
1
1
=====================>

Process finished with exit code 0


  • SimpleDateFormat.format(DateA) 自定义时间输出格式

第一步:先自定义输出想要的格式并且建立一个SimpleDateFormat类的objectA,
第二步:objectA去调用format method objectA.format(date类型/时间戳类型)
就可以让日期按照自定义的格式输出了。

用法如下(注意要写双引号):
SimpleDateFormat mydef = new SimpleDateFormat("yy-MM-dd !!! hh:mm:ss")

其中定义格式主要是下面这个部分:
yy年-MM月-dd日 !!!hh时:mm分:ss秒
年月日时间等都是可以前后打乱顺序写的,后面调用format()输出时,系统就会按照用户写的那个自定义格式输出。

举例:定义了如下的自定义格式
Date x= new Date();
SimpleDateFormat z =new SimpleDateFormat("yyyy-MM-dd; hh-mm-ss");
System.out.println(z.format(x));
结果输出就获得了

原本格式
2024-02-29 19:15:18
=======>
自定义输出后格式
2024-03-03; 07-15-18

注意到只有MM是大写,这是为了月和minutes区别开
当然,如此便可以自定义的年月日

类似的定义了Calendar y想要其按上面的方式输出日期格式,也可以:
Calendar y= Calendar.getInstance();
SimpleDateFormat z =new SimpleDateFormat("yyyy-MM-dd; hh-mm-ss");
System.out.println(z.format(y.getTime()));
思考上面这里为什么直接不写System.out.println(z.format(y))呢?提示,会报错,错误显示Cannot format given Object as a Date.

运行结果输出

2024-03-03; 07-15-18

知识补充:
对于上面的问题,如果对Calendar y取getClass()会得到 java.util.GregorianCalendar系统认为这是个Object,而format method 希望填充的是Date类型,这就是报错的原因,而对Calendar object使用getTime可以获得Date类型的object。

  • CalendarA.set(1998,06,06,19,48,56) 自定义时间
    Calendar类的objectA.set(年月日)

举例


 SimpleDateFormat z =new SimpleDateFormat("yyyy-MM-dd; hh-mm-ss");
 y.set(1999,9,9,19,06,02);

        System.out.println(z.format(y.getTime()));

运行结果为:
(原始定义的是1999-10-09 注意月份角标系统内部是0:11)

1999-10-09; 07-06-02

  • SimpleDateFormatA.parse(String)将把字符串转化成时间
    具体用法
    SimpleDateFormat类型object.parse(符合SimpleDateFormat自定义结构要求的字符串)

比如下面的代码sdf.parse(“2005-09-23 14:24:43”)其中sdf就是SimpleDateFormat类型的object,而sdf.parse内部的String就是按照sdf自定义的时间的格式写的String。

比如代码块为:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  System.out.println(sdf.parse("2005-09-23 14:24:43"));

输出为:

Fri Sep 23 14:24:43 CST 2005

练习:比较两个时间差

String s1 = “2024-02-12 13:00:00”; // 开始时间
String s2 = “2024-03-02 22:39:00”; // 结束时间

package Math;

import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;

public class datecompare {



    public static void main(String[] args) throws ParseException {
        String s1 = "2024-02-12 13:00:00"; // 开始时间
        String s2 = "2024-03-02 22:39:00"; // 结束时间

        SimpleDateFormat stru = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        //parse(String)将把字符串转化成Date时间
        //stru.parse(s1);
        Date d1= stru.parse(s1);
        Date d2= stru.parse(s2);
        //把Date时间转换成long时间戳
        long l1= d1.getTime();
        long l2= d2.getTime();

        long l=Math.abs(l2-l1);

        //时间戳的long值相差
        System.out.println(l);

        System.out.println((l/(1000*60*60*24)));//day
        System.out.println((l/(1000*60*60))%24);//hour
        System.out.println((l/(1000*60))%60);//min
    }


}


1676340000
19
9
39

Process finished with exit code 0


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值