Java学习 时间类和包装类

2023-12-13 04:29:14

目录

JDK7-时间

?编辑?Data时间类

SimpleDateFormat类


JDK7-时间

时间的相关知识

地球围着太阳转一圈是一年,地球自转一圈是一天.在同一条经线上的时间是一样的.地球公转速度不均匀 所以不用格林威治时间了.因为有误差

?

?Data时间类

Data是一个JDK写好的Javabean类,用来描述时间,精确到毫秒.

利用空参构造创建的对象,默认表示系统当前时间.

利用有有参构造的对象,表示指定的时间

  public static void main(String[] args) {
        /*
        * public Date()  创建Date对象 表示当前时间
        * public Date(long date) 创建Date对象,表示指定时间
        *
        * public void setTime(long time) //设置/修改毫秒值
        * public long getTime()          //获取时间对象的毫秒值
        * */


        //1.创建对象表示一个时间
        Date d =new Date();
        System.out.println(d);
        
        //2.创建对象表示一个指定的时间
        Date d2 =new Date(0L);//过了时间原点 0毫秒的时间 1970 8点
        System.out.println(d2);
        
        //3.setTime 修改时间
        
        //1000毫秒=1秒
        d2.setTime(1000L);
        System.out.println(d2);
        
        //4.getTime获取当前时间的毫秒值
        long time = d2.getTime();
        System.out.println(time);

import java.util.Date;
import java.util.Random;

public class day11 {
    public static void main(String[] args) {
        extracted();
        //需求二:
        Random r =new Random();

        //创建两个时间对象
        Date d1 =new Date(Math.abs(r.nextInt()));
        Date d2 =new Date(Math.abs(r.nextInt()));

        System.out.println(d1);
        System.out.println(d2);
        long time1=d1.getTime();
        long time2=d2.getTime();

        if(time1>time2){
            System.out.println("第一个时间在后面,第二个时间在前面");
        }else if(time1 <time2){
            System.out.println("第一个时间在前面,第二个时间在后面");
        }else{
            System.out.println("表示时间一样");
        }

    }

    private static void extracted() {
        //需求一:
        //1.创建一个对象,表示时间原点
        Date d1=new Date(0L);

        //2.获取d1时间的毫秒值
        long time =d1.getTime();

        //3.在这个时间的基础上加上一年的毫秒值
        time = time +1000L*60*60*24*365;

        //4.把计算之后的时间毫秒值,再设置回d1当中
        d1.setTime(time);

        //5.打印d1
        System.out.println(d1);
    }

}

?

SimpleDateFormat类

?

?

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

public class day11 {
    public static void main(String[] args) throws ParseException {
        //method();
        //1.定义一个字符串来表示时间
        String str ="2023-11-11 11:11:11";
        //2.利用空参构造创建SimpleDateFormat对象
        //细节:
        //创建对象的格式要跟字符串的格式完全一致
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(str);
        //3.打印结果
        System.out.println(date);
        System.out.println(date.getTime());


    }

    private static void method() {
        //1.利用空参构造创建SimpleDateFormat对象,默认格式
        SimpleDateFormat sdf =new SimpleDateFormat();
        Date d =new Date(0L);
        String str = sdf.format(d);
        System.out.println(str);//1970/1/1 08:00 (默认格式)

        //2.如果想指定格式:要用带参构造
        //利用带参构造创建SimpleDateFormat对象,指定格式
        SimpleDateFormat sdf2 =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EE");
        Date d1 =new Date(0L);
        String str1 = sdf2.format(d1);
        System.out.println(str1);//1970年01月01日 08:00:00 周四

        //课堂练习:yyyy年MM月dd日 HH:mm:ss 星期E
    }

}

?

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

public class day11 {
    public static void main(String[] args) throws ParseException {
        //1.可以通过2000-11-11进行解析,解析成一个Date对象
        String s ="2000-11-11";
        //2.解析
        SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
        Date date =sdf1.parse(s);
        //3.格式化
        SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日");
        String result = sdf2.format(date);
        System.out.println(result);
    }
}

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

public class day11 {
    public static void main(String[] args) throws ParseException {
        //1.比较两个时间
        //解析时间 得到毫秒值
        String startStr ="2023年11月11日 0:0:0";
        String endtStr ="2023年11月11日 0:10:0";
        String orderStr ="2023年11月11日 0:01:00";

        //2.解析:
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date startDate = sdf.parse(startStr);
        Date endDate = sdf.parse(endtStr);
        Date orderDate = sdf.parse(orderStr);

        //3.得到三个时间的毫秒值
        long startTime =startDate.getTime();
        long endTime =endDate.getTime();
        long orderTime =orderDate.getTime();

        //判断
        if(orderTime>=startTime&&orderTime<=endTime){
            System.out.println("秒杀成功");
        }else{
            System.out.println("秒杀失败了");
        }

    }
}

Calendar类

?

?

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

public class day11 {
    public static void main(String[] args) throws ParseException {
        //1.获取日历对象
        //细节1:Calendar是一个抽象类 不能直接new,而是通过一个静态方法获得到子类对象
        //底层原理:
        //会根据系统的不同时区来获取不同的日历对象,默认当前时间
        //会把时间中的纪元,年,月,日,分,秒,星期,等等的都放到一个数组当中
        // 0:纪元
        // 1:年
        // 2:月
        // 3:一年中的第几周
        // 4:一个月中的第几周
        // 5:一个月中的第几天
        //... 16

        //细节2:
        //月份:范围0~11 如果获取出来的是0 那么实际上是1
        //星期:在老外的眼里,星期日是一周中的第一天
        // 1(星期天)  2(星期一)  ...
        Calendar c = Calendar.getInstance();
        System.out.println(c);

        //2.修改一下日历代表的时间
        Date d =new Date(0L);//计算机时间原点
        c.setTime(d);

        System.out.println(c);

        //java在calendar类中,把索引对应的数字都定义成了常量
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+1;
        int date = c.get(Calendar.DAY_OF_MONTH);
        int week = c.get(Calendar.DAY_OF_WEEK);
        System.out.println(year+", "+month+", "+date+", "+getweek(week)); //1970 1 1 星期四

        c.set(Calendar.YEAR,2000);
        c.set(Calendar.MONTH,11);//12月的意思 如果你写12-->13月 也就是往前进位一年

        c.add(Calendar.MONTH,1);//整数往后加 负数往后减




    }
    //查表法
    //表:容器
    //让数据跟索引产生对应关系
    //传入对应的数字1-7
    //返回对应的星期几
    public static String getweek(int index){
        //定义一个数组 让汉字星期几 跟1-7产生对应关系
        String[] arr={"","星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
        //根据索引返回对应的星期
        return arr[index];
    }
}

JDK8新增时间相关类

Zoneld时区 下面能够看得懂就可以了?

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

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

?

?

?

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

public class day11 {
    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);//1970-01-01T00:00:00Z
        Instant instant2 = Instant.ofEpochSecond(1L);
        System.out.println(instant2);
        Instant instant3 = Instant.ofEpochSecond(1L, 10000000000L);//第二个参数微秒
        System.out.println(instant3);
        //指定时区
        //静态的方法用类名调用 非静态的方法要创建对象用对象调用
        ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
        System.out.println(time);
        //2023-12-05T18:39:04.437016700+08:00[Asia/Shanghai]

        Instant instant4 = Instant.ofEpochMilli(0L);
        Instant instant5 = Instant.ofEpochMilli(1000L);

        //isbefore:判断调用者代表的时间是否在参数表示时间的后面
        boolean result1=instant4.isBefore(instant5);
        System.out.println(result1);//true

        //minusxxx
    }
}

?

?

?

?包装类

valueof底层-128-127的数据不会new 超出就会new一个新的

?JDK5以前加法:

?

public class day11 {
    public static void main(String[] args) {
       //1.把整数转成二进制 八进制 十六进制
        String str1=Integer.toBinaryString(100);
        System.out.println(str1);

        String str2 = Integer.toOctalString(100);
        System.out.println(str2);

        String str3 = Integer.toHexString(100);
        System.out.println(str3);

        int i = Integer.parseInt("123");
        System.out.println(i);
        System.out.println(i+1);
        //细节1:
        //在类型转换的时候 括号中的参数只能是数字不能是其他 否则代码会报错
        //细节2:
        //8种包装类当中,除了Character都有对应的parseXXX的方法,进行类型转换
        String str ="true";
        Boolean.parseBoolean(str);
        System.out.println(b);

        
    }
}
import java.util.Scanner;

public class day11 {
    public static void main(String[] args) {
       Scanner sc =new Scanner(System.in);
        System.out.println("请输入一个整数:");
        //int i=sc.nextInt();
//        String str =sc.next();
//        //不能接收空格
        String line = sc.nextLine();
        System.out.println(line);
        //以后键盘录入 不管什么类型 统一使用nextLine
        int i=Integer.parseInt(line);
        double v = Double.parseDouble();
        System.out.println(v);
    }
}

import java.util.ArrayList;
import java.util.Scanner;

public class day11 {
    public static void main(String[] args) {
        //1.创建一个集合来添加整数 基本数据类型用包装类
        ArrayList<Integer>list=new ArrayList<>();
        Scanner sc =new Scanner(System.in);
        while(true){
            System.out.println("请输入一个整数");
            String numStr=sc.nextLine();
            int num = Integer.parseInt(numStr);
            if(num>100||num<1){
                System.out.println("当前数字不在1~100的范围当中,请重新输入");
                continue;
            }
            //添加到集合中
            //细节:
            //num:基本数据类型
            //集合里面的数据是Integer
            //在添加数据的时候触发了自动装箱
            //list.add(num);
           //list.add(Integer.valueOf(num));

            list.add(num);

            //统计集合中所有的数据和
            int sum = getSum(list);
            //对sum进行判断
            if(sum>200){
                System.out.println("集合中所有的数据和已经满足要求");
                break;
            }
        }
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i)+" ");
        }
    }

    private static int getSum(ArrayList<Integer> list) {
        int sum =0;
        for (int i = 0; i < list.size(); i++) {
            int num =list.get(i);
            sum+=num;
        }
        return sum;
    }
}

public class day11 {
    public static void main(String[] args) {
       String str ="123456789";
       //正则
        if(!str.matches("[1-9]\\d{0,9}")){
            System.out.println("该数据不符合题目要求,请重新输入");
            return;
        }else{
            System.out.println("该数据符合要求");
        }
        int res=0;
        for(int i=0;i<str.length();i++){
            int num =str.charAt(i)-'0';
            res+=num;
            res=res*10+num;

        }
        System.out.println(res);
        System.out.println(res+1);

    }
}

public class day11 {
    public static void main(String[] args) {
        String str = toBinaryString(6);
        System.out.println(str);
    }
    public static String toBinaryString(int num){
        StringBuilder SB = new StringBuilder();
        while(true){
            if(num==0){
                break;
            }
            int remainder=num%2;
            num=num/2;
            SB.insert(0,remainder);

        }
        return SB.toString();
    }
}

?

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Date;

public class day11 {
    public static void main(String[] args) throws ParseException {
       //JDK7
        //规则:只要对时间进行计算或者判断,都需要先获取当前时间的毫秒值

        //1.计算出生年月日
        String Birthday ="2000年1月1日";
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy年MM月dd日");
        Date date =sdf.parse(Birthday);
        long birthday =date.getTime();
        //2.获取当前时间
        long todayTime = System.currentTimeMillis();
        //3.计算间隔了多少天
        long  time= todayTime - birthday;
        System.out.println(time/1000/60/60/24);

        //JDK8
        LocalDateTime ld1= LocalDate.of(2000,1,1).atStartOfDay();
        LocalDate ld2 = LocalDate.now();

        long days = ChronoUnit.DAYS.between(ld1, ld2);
        System.out.println(days);

    }
}

import java.time.LocalDate;

public class day11 {
    public static void main(String[] args)  {
//        //JDk7
//        //Calendar 2000年3月1日//再把日历减一天 看看是28 还是29号
//        Calendar c = Calendar.getInstance();
//        c.set(2000,2,1);
//        //再把日历往前减一天
//        c.add(Calendar.DAY_OF_MONTH,-1);
//        int day =c.get(Calendar.DAY_OF_MONTH);
//        System.out.println(day);
//        //也可以2001年1月1日 往前减一天 统计这一天是一年中的第几天 366
        
        //JDK8
        //设定时间为2000 3 1
        LocalDate ld1 = LocalDate.of(2000, 3, 1);

        LocalDate ld2= ld1.minusDays(1);

        int day2 = ld2.getDayOfMonth();

        System.out.println(day2);



        
        System.out.println(ld1.isLeapYear());//true:闰年

    }
}

文章来源:https://blog.csdn.net/2301_79602614/article/details/134804514
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。