Java时间类

时间在Java中是两个类 Date 和 Calendar

Date类

Date是在Java.util包中的也就是工具包。
测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lj4ZDtzX-1673011032747)(../images/Pasted%20image%2020230106201228.png)]

输出的是当前的系统时间

修改idea中的注释的颜色:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7eUzVx28-1673011032748)(../images/Pasted%20image%2020230106201346.png)]

是date不是data


package org.data;  
  
import java.util.Date;  
  
public class Test {  
    public static void main(String[] args) {  
        Date d = new Date();//系统时间  
        System.out.println(d);  
        System.out.println(d.getYear()); //从1900年开始算的  
        System.out.println(d.getMonth()); //月份从0 开始  
        System.out.println(d.getDate()); //日期  
        System.out.println(d.getHours()); //小时  
        System.out.println(d.getMinutes());//分钟  
        System.out.println(d.getSeconds());//秒  
  
        System.out.println(d.getTime()); //得到的是一个时间戳  
  
    }  
}

最后那个时间戳就可以用来计算时间差什么的

这里可以看出Date的不方便就是从年份来看的,不方便。

calendar类

下面来看看calendar类

public abstract class Calendar
extends 
implements [Serializable]

官网说了,这东西是个抽象类,抽象类不能实例化。
官方原话:

Calendar 类是一个抽象类,它提供了在特定的时间瞬间和一组日历字段(如 YEAR、 MONTH、 DAY _ OF _ MONTH、 HOUR 等)之间进行转换的方法,还提供了操作日历字段(如获取下周的日期)的方法。时间上的瞬间可以用一个毫秒值来表示,这个值与1970年1月1日格林威治时间00.00.00.000(格里高利时间)的纪元相比是一个偏移量。

接着官方就告诉你如何在不实例化类的情况下使用这个类:

该类还提供了用于在包外实现具体日历系统的其他字段和方法。这些字段和方法被定义为 protected。

与其他区域设置敏感的类一样,Calendar 提供了一个类方法 getInstance,用于获取这种类型的通用对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,该对象的日历字段已用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();

看看输出的东西:

java.util.GregorianCalendar[time=1673008486382,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=6,DAY_OF_YEAR=6,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=34,SECOND=46,MILLISECOND=382,ZONE_OFFSET=28800000,DST_OFFSET=0]

其实可以发现,这其中包含了年月日时分秒的很多信息。

package org.data;  
  
import java.util.Calendar;  
import java.util.Date;  
  
public class testcalendar {  
    public static void main(String[] args) {  
        Calendar instance = Calendar.getInstance();  
        System.out.println(instance);  
  
        System.out.println(instance.get(Calendar.YEAR));  
        System.out.println(instance.get(Calendar.MONTH) + 1);  
        System.out.println(instance.get(Calendar.DATE));  
        System.out.println(instance.get(Calendar.HOUR_OF_DAY));  
        System.out.println(instance.get(Calendar.MINUTE));  
        System.out.println(instance.get(Calendar.SECOND));  
  
        System.out.println("---------------------------------------");  
        instance.set(Calendar.DATE,instance.get(Calendar.DATE)+30);//将时间往前30天  
        System.out.println(instance.get(Calendar.YEAR));  
        System.out.println(instance.get(Calendar.MONTH) + 1);  
        System.out.println(instance.get(Calendar.DATE));  
        System.out.println(instance.get(Calendar.HOUR_OF_DAY));  
        System.out.println(instance.get(Calendar.MINUTE));  
        System.out.println(instance.get(Calendar.SECOND));  
//        我虽然是直接加了30天,但是如果月份进位了,他会自动进位。就很方便。  
  
//        Calendar中获取完整的时间  
        Date d = instance.getTime();  
  
        System.out.println(d);  
//      date转换成calendar  
        Date date = new Date();  
        Calendar cal = Calendar.getInstance();  
        cal.setTime(date);  
  
    }  
}

可以自己code试试。这里对于日期的加或者减都是可以的。

格式化时间:

SimpleDateFormat:格式化时间的工具类。
在java.text包中
字符串转换成时间:format(Date)

package org.data;  
  
import com.sun.xml.internal.ws.util.xml.CDATA;  
  
import java.text.SimpleDateFormat;  
import java.util.Date;  
  
public class testTime {  
//    格式化时间:  
public static void main(String[] args) {  
    Date date = new Date();  
//  默认的时间效果:  
    System.out.println(date );  
  
//    格式化之后:  
//    设置格式化的类型  
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:sss");  
//    格式化日期  
    String dates = simpleDateFormat.format(date);  
    System.out.println(dates);  
  
  
}  
}

时间转换成字符串:

package org.data;  
  
import java.text.ParseException;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.Scanner;  
  
public class testTime2 {  
    public static void main(String[] args) throws ParseException {  
        Scanner scanner = new Scanner(System.in);  
        System.out.println("输入一个时间");  
        String s = scanner.nextLine();  
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        Date d = simpleDateFormat.parse(s);  
  
        System.out.println(d);  
    }  
}

时间差的计算:

package org.data;  
  
import java.text.ParseException;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
  
public class testTime2Time {  
    public static void main(String[] args) throws ParseException {  
        String S1 = "2018-09-08 12:00:00";  
        String S2 = "2018-09-09 12:00:00";  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  
        Date d1 = sdf.parse(S1);  
        Date d2 = sdf.parse(S2);  
  
//        变成时间戳之后再相减。  
        long d3 = Math.abs(d2.getTime() - d1.getTime());  
  
//        把时间戳变回来。  
        long diffSec = d3/1000; //秒级别的  
//        除以1000是毫秒变秒,就是个进制转换。  
  
//        分钟  
        long diffMin = diffSec/60;  
  
//       显示成小时加分钟:  
        long diffHour = diffMin/60;  
        long diffMin1 = diffMin%60;  
//        天数:  
        int days = (int) ((d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24));  
        System.out.println(days);  
  
    }  
}

依次类推就可以计算所有的时间差了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值