2022-7-28 学习日记 (18th day)日期/时间类

时间:

首先,在计算机里,标准的时间为格林尼治天文台的时间-----格林尼治时间

中国所在的时区为:东八区

时间戳:

1970年1月1日零时零点零分零秒到今天的毫秒数

1s=1000ms,1min=60s,1h=60min,1day=24h

时间戳在全世界都是固定的,以格林尼治时间为准

系统时间戳:System.currentTimeMillis();

日期类:Date

获取当前系统日期时间:

        Date data=new Date();
        System.out.println(data);

运行结果: 

获取毫秒数:
data.getTime()
返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒数 。返回值为long
对象是否在参数日期后
System.out.println(date1.after(date2));
如果date1在date2后则返回true,反之返回false。
对象是否在参数日期之前
System.out.println(date1.before(date2));
如果date1在date2之前则返回true,反之返回false。

两个日期进行比较

 System.out.println(date1.compareTo(date2));
如果参数Date等于此Date,则值为0 ; 如果此日期在Date参数之前,该值小于0 ; 如果此日期在Date参数0则值大于0

返回负数时,说明调用者时间是在参数时间之前

当返回0时,说明调用者时间和参数时间相同

当返回正数,说明调用者时间是在参数时间之后 

Calender:日历类、日期时间

Calender是一个抽象类,不能创建对象

初始化:

提供了一组对“年月日时分秒星期”等信息的操作函数。操作不同时区的信息。
JDK1.1版本开始,在处理时间和日期时,系统推荐使用calender类。
Calender本身比Date强大得多

 获取当前时间:

Calendar c=Calendar.getInstance();
System.out.println(c.getTime());//返回的是Date型
以毫秒为单位返回此日历的时间值。返回值为Long
getTimeInMillis()	

转换为Instant
toInstant​()

TimeZone:时区

获取时区
getTimeZone() 

获取主机的默认时区
TimeZone.getDefault()

ZoneId:

getId()---获取时区ID

设置时区:

ZoneId zoneId= ZoneId.of("America/New_York");

日期格式化:

SimpleDateFormat

format:格式化date类型,把Date类型转成String类型我们要展示数据到客户端

parse:把String类型的时间,转成Date类型从客户端传过来的时间,一般都是String类型。存入数据库

Date date=new Date;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss.SSS");
System.out.println(sdf.format(date));

例题:

设计一个工具类:
可以对Date类型的日期进行格式化,转成String,format方法
可以对String类型的日期进行格式转换,转换成Date,parse方法,参数时String ,返回值是Date

 方法类:

public class Ch01 {
    private static final SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss.SSS");
    public static final String in(Date date){
    return sdf.format(date);
    }
    public static final Date on(String date) throws  Exception{
        return sdf.parse(date);
    }
}

 Demo测试类:

public class Demo {
    public static void main(String[] args) throws Exception{
       System.out.println( Ch01.in(new Date()));
       System.out.println( Ch01.on("2002年01月22日 12:02:12.253"));
    }
}



以上时间日期类都是在JDK8之前的。

但是会有一些问题:

比如:Date和Calender,获取到的月份都是0-11,而不是我们生活中的1-12

所以根据阿里规约的明确要求:

如果是JDK8的应用

Instant代替Date

LocalDateTim代替Calender

DateTimeFormatter代替SimpleDateFormat

Instant:

获取当前时间(依照美国时间算)

Instant instant=Instant.now();

获取秒数

instant.getEpochSecond();

获取毫秒数(返回的是long类型)instant.toEpochMilli()
Duration持续时间(显示七天后的日期)instant.plus(Duration.ofDays(7));

LocalDate/LocalTime:获取日期/获取时间

LocalDate localdate=LocalDate.now();

获取年getYear();
获取月getMonth();
判断是否为闰年isLeapYear();

LocalDate of=LocalDate.of(2024,9,10);可以定义一个日期,用of.isLeapYear(),判断是否为闰年

DateTimeFormatter:修改规范

LocalDateTime l= LocalDateTime.now();
DateTimeFormatter dateTimeFormatter= DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss.SSS");
System.out.println(l.format(dateTimeFormatter));

DateTimeFormatter是单例的,一次只能用一个。

日期类型建的转换:

        Instant instant=Instant.now();
        System.out.println(instant);
        //把instant转成Date
        Date date=Date.from(instant);
        //把Date转成Instant
        Instant toInstant=date.toInstant();
        //把Instant转成LocalDateTime
        LocalDateTime l=LocalDateTime.ofInstant(instant,ZoneId.systemDefault());
        //把LocalDateTime转成Instant
        Instant toL=LocalDateTime.now().toInstant(ZoneOffset.UTC);
//        Demo22 demo=new Demo22();
//        demo.dateToString(date);
        //把date转成LocalDateTime
        Date date1=new Date();
        LocalDateTime ll=LocalDateTime.ofInstant(date1.toInstant(),ZoneId.systemDefault());
        //把LocalDateTime转成date
        LocalDateTime now=LocalDateTime.now();
        ZonedDateTime zonedDateTime=now.atZone(ZoneId.systemDefault());
        Instant instant1=zonedDateTime.toInstant();
        Date date2=Date.from(instant1);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值