JDK时间

本文介绍了Java中处理日期和时间的相关概念,包括世界标准时间(GMT)、原子钟、中国标准时间的计算、Date和SimpleDateFormat类的使用,以及JDK8新增的时间类如Instant、ZoneId和DateTimeFormatter,展示了如何创建、格式化、解析时间和判断时区等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Date

全世界的时间,有一个统一的计算标准。 世界标准时间:格林尼治时间/格林威治时间简称GMT,目前时间标准时间已经替换为:原子钟。 中国标准时间:世界时间+8 时间换算单位: 一秒等于一千毫秒 一毫秒等于一千微秒 一微秒等于一千纳秒 Date类是JDK写好的一个Javabean类,用来描述时间,精确到毫秒。 利用空参构造创建对象,默认是系统当前的时间。利用有参构造创建对象,表示的是指定的时间。 1.如何创建Date对象 Date d1=new Date(); Date d2=new Date(指定毫秒值); 2.如何修改时间对象中的毫秒值 setTime(指定毫秒值); 3.如何获取时间对象中的毫秒值 getTime();

SimpleDateFormat

作用:

1.格式化:把时间变成我们喜欢的格式

2.解析:把字符串表示的时间变成Date对象

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

public class a01SimpledateFormatedemo01 {
    public static void main(String[] args) throws ParseException {
       //1.定义一个字符串表示时间
        String str="2023-11-11 11:11:11";
        //细节:创建对象的格式要和字符串的格式完全一致
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(str);
        System.out.println(date);

    }

    private static void method() {
        //1.利用空参构造创建SimplaDateFormate对象,默认格式
        SimpleDateFormat sdf1=new SimpleDateFormat();
        Date d1=new Date(0L);
        String str=sdf1.format(d1);
        System.out.println(str);
        //2.利用带参构造创建SimplaDateFormate对象,指定格式
        SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EE");
        String format = sdf2.format(d1);
        System.out.println(format);
    }
}

练习

package MyApi.a09jdkdemo;

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

public class a02SimpleDateFormatedemo02 {
    public static void main(String[] args) throws ParseException {
        /*
        * 假设你初恋的出生年月日为:2000-11-11
        * 请用字符串表示这个数据,并将其转换为:2000年11月11日*/
    String str="2000-11-11";
        SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf1.parse(str);
        SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日");
        String format = sdf2.format(date);
        System.out.println(format);
    }
}
package MyApi.a09jdkdemo;

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

public class a03SimpleDateFormatedemo03 {
    public static void main(String[] args) throws ParseException {
        /*需求:
        * 秒杀活动:2023年11月11日 0:0:0
        * 开始时间:2023年11月11日 0:10:0
        * 小贾下单并付款的时间为:2023年11月11日 0:01:00
        * 小皮下单并付款的时间为:2023年11月11日 0:11:0
        * 用代码说明这两位同学有没有参加上秒杀活动*/
    //定义字符串表示时间
        String startStr="2023年11月11日 00:00:00";
String endStr="2023年11月11日 00:10:00";
String orderStr="2023年11月11日 00:01:00";
        String xpoederStr="2023年11月11日 00:11:00";
        //解析时间得到Date时间
        SimpleDateFormat sdf=new SimpleDateFormat("yyy年MM月dd日 HH:mm:ss");
        Date startdate = sdf.parse(startStr);
        Date enddate = sdf.parse(endStr);
        Date orderdate = sdf.parse(orderStr);
        //获得时间毫秒值
        long startdateTime = startdate.getTime();
        long enddateTime = enddate.getTime();
        long orderdateTime = orderdate.getTime();
        //判断
        if(orderdateTime>=startdateTime&&orderdateTime<=enddateTime){
            System.out.println("参加秒杀活动成功");
        }else{
            System.out.println("参加秒杀活动失败");
        }

    }
}

calendar

calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年、月日。

calendar是一个抽象类,不能直接创建对象

package MyApi.a09jdkdemo;

import java.util.Calendar;
import java.util.Date;

public class a01calendardemo01 {
    public static void main(String[] args) {
        //1.获取日历对象
        //底层原理:
        //会根据系统的不同时区来获取不同的日历对象,默认表示当前时间
        //会把时间中的纪元、年月日时分秒星期等都放在一个数组当中
        //细节2:
        //月份:范围0-11
        //星期:星期日是一周中的第一天
        Calendar c = Calendar.getInstance();
        System.out.println(c);
//2.修改一下日历代表的时间
        Date d=new Date();
        c.setTime(d);
        System.out.println(c);
        c.set(Calendar.YEAR,2023);
        c.set(Calendar.MONTH,9);
        c.set(Calendar.DAY_OF_MONTH,10);
        //调用方法在这个基础上增加一个月
        c.add(Calendar.MONTH,-1);
        int year = c.get(1);
        int month= c.get(2);
        int date = c.get(5);
        int week=c.get(Calendar.DAY_OF_WEEK);
        System.out.println(year+","+month+","+date+","+getweek(week));
    }
    public static String getweek(int index){
        //定义一个数组,让汉字星期几,跟1-7产生关系
        String [] arr={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
        return  arr[index];
    }
}

JDK8新增时间相关类

ZoneId时区

package MyApi.a09jdkdemo;

import java.time.ZoneId;
import java.util.Set;

public class A01Zoneiddemo01 {
    public static void main(String[] args) {
        //获取所有时区名称
        Set<String> zoneIds = ZoneId.getAvailableZoneIds();
        System.out.println(zoneIds.size());
        System.out.println(zoneIds);
        //2.获取当前系统的默认时区
        ZoneId zoneId = ZoneId.systemDefault();
        System.out.println(zoneId);
        //3.获取指定时区
        ZoneId zoneId1 = ZoneId.of("Asia/Pontianak");
        System.out.println(zoneId1);
    }
}

Instant时间戳

package MyApi.a09jdkdemo;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class A01_instantDemo {
    public static void main(String[] args) {
        //1.获取当前时间的instant对象(标准时间)
        Instant now = Instant.now();
        System.out.println(now);
        //2.根据(秒/毫秒/纳秒)获取instant对象
        Instant instant1 = Instant.ofEpochMilli(0L);
        System.out.println(instant1);
        Instant instant2 = Instant.ofEpochSecond(1L);
        System.out.println(instant2);
        Instant instant = Instant.ofEpochSecond(1l, 100000000L);
        System.out.println(instant);
        //3.指定时区
        ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
        System.out.println(time);
        //4.判断时间的方法
        Instant instant3 = Instant.ofEpochMilli(0L);
        Instant instant4 = Instant.ofEpochMilli(1000L);
        boolean result1 = instant3.isBefore(instant4);
        System.out.println(result1);
        //5.减少时间系列的方法
        Instant instant5 = Instant.ofEpochMilli(3536352L);
        System.out.println(instant5);
        Instant instant6 = instant5.minusSeconds(1);
        System.out.println(instant6);
        //6.增加时间系列的方法

    }
}

ZoneDateTime带时区的时间

DateTimeFormattter用于时间格式化和解析

LocalDate LocalTime LocalDateTime

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值