一文搞懂Java日期时间类

一、基础知识

① GMT(Greenwich Mean Time)代表格林尼治标准时间。
② GMT又作为世界时,被称为UT
③ CST可以代表以下4个不同的时区:

  • Central Standard Time (USA) UT-6:00
  • Central Standard Time (Australia) UT+9:30
  • China Standard Time UT+8:00
  • Cuba Standard Time UT-4:00 (古巴)
    ④ 在java中获取的CST使用中国时区,在js中默认采用美国中部时间。

二、JDK8之前的日期和时间

1、java.util.Date类

Date date = new Date()
 System.out.println(date);
 // Sat Oct 16 14:15:30 CST 2021
 System.out.println(date.toString());
 // Sat Oct 16 14:15:30 CST 2021
 // 上面方法两个都表示当前时间,不过显示的格式不符合中国人
 System.out.println(System.currentTimeMillis());
 System.out.println(date.getTime());
// 1634365656101
// 上面两个方法获取到的是从1970年元旦到现在的毫秒数

Date date2 = new Date(long date); // 创建指定毫秒数

2、java.sql.Date类

java.sql.Date date1 = new java.sql.Date(1634365656081L);
// 2021-10-16

3、java.text.SimpleDateForma类

SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
Date date = new Date();
// Sat Oct 16 14:47:02 CST 2021
// 格式化:日期->String
String format = simpleDateFormat.format(date);
// 21-10-16 下午2:47
// 解析:string->日期
String str = "21-10-16 下午2:47"
Date date1 = simpleDateFormat.parse(str);

// 指定格式的simpleDateFormat,格式化和解析会按照参数的格式进行。
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd GGG hh:mm:ss aaa");
// 2021-10-16 公元 02:54:35 下午

4、java.util.Calendar类
日历类Calendar是一个抽象类,可以使用该类的静态方法来创建对象,也可以直接创建其子类GregorianCalendar对象。

        Calendar calendar = Calendar.getInstance();
        
        // 获得几天是这个月的第几天
        int days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days); // 16

        // 改变calendar中的日历信息
        calendar.set(Calendar.DAY_OF_MONTH,22);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days); // 22

        // 改变calendar中的日历信息,通过add改变
        calendar.add(Calendar.DAY_OF_MONTH,3);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days); // 25
 
        // 把Calendar类转换为Date类
        Date time = calendar.getTime();
        System.out.println(time); // Mon Oct 25 15:08:28 CST 2021

        // 把Date类转换为Calendar类
        Date date = new Date();
        calendar.setTime(date);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); //16

5、注意事项
① 日历类获取月份时,一月是0…二月是1,十二月是11。
② 获取星期时,星期日是1,星期二是2…星期六是7。

三、JDK8中的API

在jdk1.0时,采用Date类,随后在JDK1.1后采用Calendar代替Date。但是它们都有一些问题:
① 可变性:像日期和时间这样的类应该是不可变的。
② 偏移性:Date中的年份是从1900年开始的,而月份都是从0开始的。
③ 格式化:只有Date能格式化,Calendar不行。
④ 它们不是线程安全的,不能处理闰秒。
针对上面的问题,JDK8吸收了Joda-Time的精华,引入了java.time API。包含了关于本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)
1、LocalDate,LocalTime,LocalDateTime

		// 两种构造方法
		LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDate); // 2021-10-16
        System.out.println(localTime); // 15:28:04.023
        System.out.println(localDateTime); // 2021-10-16T15:28:04.023
        LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 12, 13, 50);
        System.out.println(localDateTime1);

        System.out.println(localDateTime1.getMonth()); // OCTOBER
        System.out.println(localDateTime1.getDayOfWeek()); // TUESDAY
        // 设置方法,返回新的对象
        LocalDateTime localDateTime2 = localDateTime1.withDayOfMonth(10);

2、DateTimeFormat

        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyy-MM-dd hh:mm:ss");

        // 格式化
        String format = dateTimeFormatter.format(LocalDateTime.now());
        // 解析
        TemporalAccessor parse = dateTimeFormatter.parse(format);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值