Java之日期与时间

Date类

        Date类代表当前所在系统的日期时间信息

        Date的构造器

        public Date()        //创建一个Date对象,代表的是系统当前此刻日期与时间

        public Date(long time)        //可以把时间毫秒值转换成Date的日期对象

        Date的常用方法

        public long getTime()        //返回从1970年1月1日 00:00:00走到此刻的毫秒数

        public void setTime()        //设置日期对象的时间为当前时间毫秒值对应的时间

SimpleDateFormat类

        它是用来对日期格式化的一个类,因为日期对象直接输出的话数据很多很复杂

        例如:

public static void main(String[] args){
    
    Data d= new Date();
    System.out.println(d);
    //Thu Sep 22 19:41:39 CST 2022
    long t = d.getTime();
    System.out.println(t);
    //1663846899021

    
}

        而我们日常见到的时间经常是  xxxx-xx-xx xx:xx:xx,如2012-12-23 13:25:16,那么我们就可使用SimpleDateFormat来格式话日期。

        构造器:

public SimpleDataFormat(String pattern)      //创建了一个简单日期格式化对象,并存储了一 个格式化的信息格式      

         格式化方法:

public final String format(Date date)        //将日期格式化为日期/时间字符串

public final String format(Object time)        //将时间毫秒值化为日期/时间字符串

        常用格式模式:

2022-12-12 13:14:15————yyyy-MM-dd HH:mm:ss

2022年12月12日 13:14:15————yyyy年MM月dd日 HH:mm:ss

        解析字符串时间为日期对象

public Date parse(String source)        //从给定字符串时间来转化为Date对象

Calendar类

        calendar顾名思义是一个日历类,代表此时日期对应的日历对象。但是他是一个抽象类,不能直接创建对象。

        创建对象的方法:

public static Calendar getInstance()        //获取当前日历对象

        常用方法:

public int get(int field)        //去日期中的某个字段信息

public void set (int field,int value)        //修改日历的某个字段信息

public void add(int field,int amout)        //为某个字段增加减少指定的值

public final Date getTime()        //拿到此刻日期对象

public long getTimeMillis()        //拿到此刻时间毫秒值 

Java8后新提供的时间类 

        

LocalDate不包含具体时间的日期
LocalTime不包含日期的时间
LocalDateTime包含了日期及时间
Instant代表的是时间戳
DateTimeFormatter用于做时间的格式化和解析
Duration用于计算两个”时间“间隔
Preriod用于计算两个”日期“间隔

        新增的Api严格划分了时间,这样对时间的处理就会更加方便,并且新的Api类型几乎都是不变类型,不用担心被修改。

LocalDate LocalTime LocalDateTime

        这三个类创建的对象都是不可变对象,他们三者的API都是通用的。

创建对象的方法

        public static xxxx now();        //静态方法,根据当前时间创建对象

        public static xxxx of(...);        //静态方法,指定日期/时间创建对象

常用API

public int getYear()获取年
public int getMonthValue()获取月份
public int getDayOfMonth()获取是当前月的第几天
public int getDayOfYear()获取是当前年的第几天
public DayOfWeek getDayOfWeek()

获取星期        

LocalDateTime可以转化为其他两个类

        public LocalDate toLocalDate()        //转换成一个LocalDate对象

        public LocalTime toLocalTime()        //转换成一个LocalTime对象 

修改日期相关API

plusDays,plusWeeks,plusMonths,plusYears       向当前的LocalDate对象添加天数,周数,月数,年数
minusDays,minusWeeks,minusMonths,minusYears向当前的LocalDate对象减去天数,周数,月数,年数
withDayOfMonth,withDayOfYear,withMonth,withYear将月份天数,年份天数,月份,年份修改完指定的值并返回新的LocalDate对象
isBefore,isAfter比较两个LocalDate

 Instant

   Instant即时间戳,Instant类由一个静态的工厂方法now()可以返回当前时间戳     

Instant instant = Instant.now();
System.out.println("当前时间戳是: "+instant);

Date date = Date.from(instant);
System.out.println("当前时间戳是: "+data);

instant=date.toInstant();
System.out.println(instant);

DateTimeFormatter 

        即时间格式器,正反都能使用format方法

        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);//2022-10-05T16:14:40.253223400
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String ldtStr = ldt.format(dtf);
        System.out.println(ldtStr);//2022-10-05 16:14:40
        String ldtStr1 = dtf.format(ldt);
        System.out.println(ldtStr1);//2022-10-05 16:14:40

Period

        Period类常用来计算日期间隔差异,用于比较LocalDate

        LocalDate today = LocalDate.now();
        System.out.println(today);     // 2022-10-05
        LocalDate birthDate = LocalDate.of(1995, 1, 11);
        System.out.println(birthDate); // 1995-01-11
        Period period = Period.between(birthDate, today);
        System.out.printf("年龄 : %d 年 %d 月 %d 日", period.getYears(), period.getMonths(), period.getDays());

 Duration

        Duration类用来计算时间间隔是LocalDateTime之间的比较,也可以用于Instant之间的比较


        LocalDateTime today = LocalDateTime.now();
        System.out.println(today);
        LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30);
        System.out.println(birthDate);
        Duration duration = Duration.between(birthDate, today);//第二个参数减第一个参数
        System.out.println(duration.toDays());//两个时间差的天数
        System.out.println(duration.toHours());//两个时间差的小时数
        System.out.println(duration.toMinutes());//两个时间差的分钟数
        System.out.println(duration.toMillis());//两个时间差的毫秒数
        System.out.println(duration.toNanos());//两个时间差的纳秒数

 最后还有一个ChronoUnit类可以用于在单个时间单位内测量一段时间,这个工具类是最全的,可以用于比较所有的时间单位,具体方法可以自行去JDK文档查看,再此就不列举了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你要不要认识我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值