栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA日期类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA日期类

日期类 第一代日期类

1.Date类:精确到毫秒,代表特定的瞬间

2.SimpleDateFormat类:格式和解析日期的类 SimpleDateFormat格式化和解析日期的具体类。它允许进行格式化【日期 --> 文本】,解析【文本 --> 日期】和规范化

3.SimpleDateFormat类需要掌握方法【format:格式形式 parse:转换解析【就是将字符串日期格式转成Date类】】

4.一般情况下Date类和SimpleDateFormat类一起搭配使用

Date和SimpleDateFormat类案例演示
package wrapper_;

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


public class date_Date01 {
    public static void main(String[] args) throws ParseException {
        
        Date date = new Date();//获取当前系统时间
        System.out.println("当前系统日期="+date);

        // 通过指定毫秒数得到时间
        Date date1 = new Date(1688688888);//通过指定毫秒数得到时间
        System.out.println("通过指定毫秒获取某个时间="+date1);//获取某个时间对应的毫秒数


        

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String format = sdf.format(date);// 对date日期进行格式化
        System.out.println("通过format方法转化日期="+format);

        // SimpleDateFormat类中的parse方法【对字符串日期格式进行转化】
        
        String date3 = "1998-12-16 17:12:16";
        Date parse = sdf.parse(date3);
        System.out.println("通过字符串日期进行转化="+parse);

        
    }
}
第二代日期类

1.主要就是Calendar类【日历】

public abstract Calendar extends Object implements Serializable,Cloneable ,Comparable{}

2.Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR MONTH DAY_OF_MONTH HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段【例如获得下星期的日期】提供了一些方法

Calendar类继承关系图

Calendar类会使用相关的字段即可

下面如果我们需要按照 24 小时进行来获取时间,Calendar.HOUR 【这是十二进制】 == 改成 ==》Calendar.HOUR_OF_DAY【这是二十四进制 】

Calendar 没有专门的格式化方法,所以需要程序员自己来组合显示

Calendar类案例演示

package wrapper_.date_;

import java.util.Calendar;


public class Calendar01 {
    public static void main(String[] args) {
        //注意由于 Calendar 是抽象的不能直接 new 实例化,并且构造器是 protected 修饰的
        // 可以 通过 getInstance 来获取 Calendar 实例
//        Calendar calendar = new Calendar();
        Calendar calendar = Calendar.getInstance();//这种方式获取 Calendar 对象
        System.out.println("calendar="+calendar);
       // System.out.println(Calendar.YEAR);//注意不能直接使用 Calendar.YEAR 等相关的字段
        // 【这样获取是获取到默认值,没有与对象相关联】[这样返回是默认值 1]

        // 学会获取相关的字段即可 获取日历对象的某个日历字段
        // 年
        System.out.println("年:"+ calendar.get(Calendar.YEAR));
        // 月 获取月 因为Calendar 返回月时候 是按照 0 开始编号的
        System.out.println("月:"+calendar.get(Calendar.MARCH));
        // 日 获取日
        System.out.println("日:"+calendar.get(Calendar.DAY_OF_MONTH));
        // 获取小时
        System.out.println("小时:"+calendar.get(Calendar.HOUR_OF_DAY));
        // 分钟
        System.out.println("分钟:"+ calendar.get(Calendar.MINUTE));
        // 秒
        System.out.println("秒:"+ calendar.get(Calendar.SECOND));

        // Calender 没有专门的格式化方法,所以需要程序员自己来级合显示
        System.out.println(calendar.get(Calendar.YEAR)+"-"+calendar.get(Calendar.MARCH)+"-"+calendar.get(Calendar.DAY_OF_MONTH)
        + "t" +calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE)+ ":"+calendar.get(Calendar.SECOND));

        
    }
}
第三代日期类

由于前面再代日期类的不足分析:

JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入 Calendar类之后被弃用了。而Calendar存在问题是:

    可变性:像日期和时间这样的类应该是不可变的偏移性:Date中的年份是从 1900开始的,而月份都是从0开始格式化:格式化只对Date有用,Calendar则不行此外,它们也不是线程安全的,不能处理闰秒问题【每隔2天,多出1s】

第三代日期类:有三个LocalDate【年月日】LocalTime【时分秒】 LocalDateTime【年月日时分秒】是在JDK8引入的

注意的是:第三代日期类的【LocalDate 和 LocalTime 和 LocalDateTime这三个类的构造器都是私有的,不能通过 new进行实例化,要通过类名.now获取对象实例】

LocalDate只包含日期,可以获取日期字段

LocalTime只包含时间,可以获取时间字段

LocalDateTime包含日期+时间 ,可以获取日期和时间字段

package wrapper_.date_;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;


public class LocalDateTime_ {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();//获取日期类对象
        LocalTime time = LocalTime.now();//获取时间类对象
        LocalDateTime dateTime = LocalDateTime.now();//获取日期时间对象

        //年
        int year = dateTime.getYear();
        System.out.println("年="+year);
        //月 获取月份有两种方式:
        // 方式一:
        Month month = dateTime.getMonth();//获取的返回是英文
        System.out.println("月="+month);
        // 方式二:
        int monthValue = dateTime.getMonthValue();
        System.out.println("月="+monthValue);
        // 日
        int dayOfMonth = dateTime.getDayOfMonth();
        System.out.println("日="+dayOfMonth);
        // 时
        int hour = dateTime.getHour();
        System.out.println("时="+hour);
        //分
        int minute = dateTime.getMinute();
        System.out.println("分="+minute);
        //秒
        int second = dateTime.getSecond();
        System.out.println("秒="+second);

        
    }
}
DateTimeFormat格式日期类

类似于SImpleDateFormat类

DateTimeFormat dtf = DateTimeFormatter.ofPattern(格式);【注意不能直接new实例化,因为构造器是默修饰的,要使用静态方法ofPattern方法进行指定格式】

String str = dtf.format(日期对象);

案例演示:

package wrapper_.date_;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;


public class DateTimeFormatter01 {
    public static void main(String[] args) {
        LocalDateTime ldt = LocalDateTime.now();
        //日期格式化:
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        //调用DateTimeFormatter类中的 format方法进行日期格式
        String date = dtf.format(ldt);
        System.out.println(date);
        
    }
}
Instant时间戳 【构造器是私有化,只能通过Instant.now()方法获取Instant对象】

类似于Date提供了一系列和Date转换的方式

Instant  --> Date
Date date = Date.from(instant);
Date ---> Instant
Instant instant = date.toInstant();

案例演示:
Instant  now = Instant.now();
System.out.println(now);
Date date = Date.from(now);
Instant instant = date.toInstant();
public static void main(String[] args) {
    //获取时间戳对象
    Instant instant = Instant.now();
    Date date = new Date();
    // Instant 转成 Date
    Date from = Date.from(instant);
    // Date 转成 Instant
    Instant toInstant = date.toInstant();
}
第三代日期类更多方法

LocalDateTime类

MonthDay:检查重复事件

是否是闰年

增加日期的某个部分

使用plus方法测试增加时间的某个部分

使用minus方法测试查看一年前和一年后的日期

package wrapper_.date_;

import javax.swing.text.DateFormatter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;


public class LocalTimeFormatter02 {
    public static void main(String[] args) {
        // 使用DateTimeFormatter 对象进行日期格式化
        DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        LocalDateTime dateTime = LocalDateTime.now();
        // 增加 168 天后的日期
        LocalDateTime time1 = dateTime.plusDays(168);
        System.out.println("168天后的日期="+ofPattern.format(time1));

        // 减去 168 分钟的时间
        LocalDateTime dateTime1 = dateTime.minusMinutes(168);
        System.out.println("减去 168 分钟的时间"+ofPattern.format( dateTime1));
        

    }
}
常用类作业

1.编程题

1.将字符串中指定部分进行反转。比如将"abcdf"反转为"aedcbf"
2.编写方法 public static String reverse(String str,int start,int end)搞定
package wrapper_.execrise;


public class HomeWork01 {
    public static void main(String[] args) {
        String str = "abcdef";
        String reverse = reverse(str, 1, 4);
        System.out.println(reverse);
    }

    
    public static String reverse(String str,int start,int end){
        // 对传入的参数进行检验
        if (str!=null && start 

2.编程题

自己写的代码:

package wrapper_.execrise;

import java.util.Scanner;


public class HomeWork02 {
    public static void main(String[] args) {
        userName();
    }

    public static Scanner input(){
        Scanner sc = new Scanner(System.in);
        return sc;
    }

    public static void userName() {
        System.out.println("请输入用户名:");
        String s = input().nextLine();
        System.out.println(s.length());
        if (s.length() != 2 && s.length()!=3 && s.length()!=4){
            throw new RuntimeException("您输入用户名有误");
        }
        userPassword();
    }
    public static void userPassword(){
        System.out.println("请输入密码:");
        String s = input().nextLine();
        if (s.length()!=6)
            throw new NumberFormatException("密码长度不正确");
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (!Character.isDigit(chars[i]))
                throw new NumberFormatException("密码应全是数字");
        }
        userEmail();
    }

    public static void userEmail(){
        System.out.println("请输入邮箱:");
        String s = input().nextLine();
        int i = s.indexOf("@");
        if (i == -1)
            throw new RuntimeException("邮箱应包含“@”符号");
        if (s.indexOf(".") == s.indexOf(i-1))
            throw new RuntimeException("邮箱应“.”应该在“@”符号前");
        System.out.println("注册成功!");
    }
}

老师写代码:

package com.hspedu.homework;


public class Homework02 {
    public static void main(String[] args) {

        String name = "abc";
        String pwd = "123456";
        String email = "ti@i@sohu.com";

        try {
            userRegister(name,pwd,email);
            System.out.println("恭喜你,注册成功~");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

    }

    
    public static void userRegister(String name, String pwd, String email) {

        //再加入一些校验
        if(!(name != null && pwd != null && email != null)) {
            throw  new RuntimeException("参数不能为null");
        }

        //过关
        //第一关
        int userLength = name.length();
        if (!(userLength >= 2 && userLength <= 4)) {
            throw new RuntimeException("用户名长度为2或3或4");
        }

        //第二关
        if (!(pwd.length() == 6 && isDigital(pwd))) {
            throw new RuntimeException("密码的长度为6,要求全是数字");
        }

        //第三关
        int i = email.indexOf('@');
        int j = email.indexOf('.');
        if (!(i > 0 && j > i)) {
            throw new RuntimeException("邮箱中包含@和.   并且@在.的前面");
        }
    }

    //单独的写一个方法,判断 密码是否全部是数字字符 boolean
    public static boolean isDigital(String str) {
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] < '0' || chars[i] > '9') {
                return false;
            }
        }
        return true;
    }

}

3.编程题

package com.hspedu.homework;


public class Homework03 {
    public static void main(String[] args) {
        String name = "Willian Jefferson Clinton";
        printName(name);
    }

    
    public static void printName(String str) {

        if(str == null) {
            System.out.println("str 不能为空");
            return;
        }

        String[] names = str.split(" ");
        if(names.length != 3) {
            System.out.println("输入的字符串格式不对");
            return;
        }

        String format = String.format("%s,%s .%c", names[2], names[0], names[1].toUpperCase().charAt(0));
        System.out.println(format);
    }
}

4.编程题

5.分析题

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750100.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号