【java】重写 equalis comperto Date类

重写


一 equalis

@Override //重写equals方法
public boolean equals(Object obj) {
	if(obj instanceof Student){
	Student s1=(Student)obj;
	return 	this.id==s1.id&&this.name==s1.name&&this.age==s1.age;
	} else {
	System.out.println("错误");
	return false;
}

二 Comperable接口


当我们使用Comperable接口时,我们就要重写compareTo方法。

    @Override  
    public int compareTo(Person other) {  
        // 这里我们使用年龄作为排序的依据  
        if (this.age < other.age) {  
            return -1;  
        } else if (this.age > other.age) {  
            return 1;  
        } else {  
            return 0;  
        }  
    }

模拟对年龄排序

class comperName implements Comparator<Students>{
 
    @Override
    public int compare(Students o1, Students o2) {
        return o1.getName().compareTo(o2.getName());
    }
}
comperName comperName=new comperName();
Arrays.sort(students,comperName);

三 实现Comparator接口

@Override  
    public int compare(Person p1, Person p2) {  
        // 假设Person类有一个getAge()方法  
        return Integer.compare(p1.getAge(), p2.getAge()); // 按年龄排序  
    }

四 Date 类

1 常见方法

序号方法描述
1boolean after(Date date)若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
2boolean before(Date date)若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
3Object clone( )返回此对象的副本。
4int compareTo(Date date)比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
5int compareTo(Object obj)若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
6boolean equals(Object date)当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
7long getTime( )返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
8int hashCode( )返回此对象的哈希码值。
9void setTime(long time)用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
10String toString( )把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
1-1 日期比较

java 有以下三种方法

  • 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
  • 使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
  • 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
2-2 使用 SimpleDateFormat 格式化日期
public static void main(String[] args) throws Exception {
 
        // 定义输出格式   
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 将字符串转化为日期   
        Date date = sdf.parse("2023-11-11 11:11:11");
        System.out.println(date);
 
        Date date = new Date();
        // 将日期转化为字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String str = sdf.format(date);
        System.out.println(str);
    }

五 DateFormat类


1 基本概念

java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
格式化:按照指定的格式,从Date对象转换为String对象。(format)
解析:按照指定的格式,从String对象转换为Date对象。(parse)

2 常见方法

2-1 构造方法

由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:

public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。

参数pattern是一个字符串,代表日期时间的自定义格式。

格式规则

常用的格式规则为:

标识字母(区分大小写)含义
y
M
d
H
m
s
创建SimpleDateFormat对象的代码如下:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
 
public class Demo02SimpleDateFormat {
    public static void main(String[] args) {
        // 对应的日期格式如:2023-11-11 11:11:11
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    }    
}
2-2 DateFormat类常用方法

DateFormat类的常用方法有:

  1. public String format(Date date):将Date对象格式化为字符串。

format方法的代码如下:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把Date对象转换成String
*/
public class Demo03DateFormatMethod {
    public static void main(String[] args) {
        Date date = new Date();
        // 创建日期格式化对象,在获取格式化对象时可以指定风格
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = df.format(date);
        System.out.println(str); // 2020年09月19日
    }
}
  1. public Date parse(String source):将字符串解析为Date对象。

parse方法的代码如下:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
 把String转换成Date对象
*/
public class Demo04DateFormatMethod {
    public static void main(String[] args) throws ParseException {
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = "2023年11月11日";
        Date date = df.parse(str);
        System.out.println(date); // Tue Dec 11 00:00:00 CST 2023
    }
}

六 Calendar类

  1. 基本概念
    我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。

Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

java.util.Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。

2. 常用方法

2.1 构造方法

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:

Calendar静态方法

  • public static Calendar getInstance():使用默认时区和语言环境获得一个日历
    例如:
import java.util.Calendar;
 
public class Demo06CalendarInit {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
    }    
}
2.2 常用方法

根据Calendar类的API文档,常用方法有:

  • **public int get(int field):**返回给定日历字段的值。
  • **public void set(int field, int value):**将给定的日历字段设置为给定值。
  • **public abstract void add(int field, int amount):**根据日历的规则,为给定的日历字段添加或减去指定的时间量。
  • **public Date getTime():**返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
    Calendar类中提供很多成员常量,代表给定的日历字段:
字段值含义
YEAR
MONTH月(从0开始,可以+1使用)
DAY_OF_MONTH月中的天(几号)
HOUR时(12小时制)
HOUR_OF_DAY时(24小时制)
MINUTE
SECOND
DAY_OF_WEEK周中的天(周几,周日为1,可以-1使用)
1. get/set方法

get方法用来获取指定字段的值,set方法用来设置指定字段的值。代码实例如下:

import java.util.Calendar;
public class Demo {
    public static void main(String[] args) {
        // 创建Calendar对象
        Calendar cal = Calendar.getInstance();
        // 获取年 
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
 
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
import java.util.Calendar;
 
public class Demo07CalendarMethod {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        // 设置年
        cal.set(Calendar.YEAR, 2023);
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
 
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
2. add方法

add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量。代码如:

import java.util.Calendar;
 
public class Demo08CalendarMethod {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
 
        // 使用add方法
        cal.add(Calendar.DAY_OF_MONTH, 5); // 加5天
        cal.add(Calendar.YEAR, -2); // 减2年
        // 获取年
        year = cal.get(Calendar.YEAR);
        // 获取月
        month = cal.get(Calendar.MONTH) + 1;
        // 获取日
        dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
    }
}
3. getTime方法:返回对应的Date对象

Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。

import java.util.Calendar;
import java.util.Date;
 
public class Demo {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        System.out.println(date); 
    }
}

注意事项:
​ 1.西方星期的开始为周日(1)周一(2),中国开始为周一,因此可以-1使用。
​ 2.在Calendar类中,月份的表示是以0-11代表1-12月(可以+1使用)。
​ 3.日期是有大小关系的,时间靠后,时间越大。


总结
Java早期通过使用Date来计算时间,后来大部分Date类的方法都过时了,又转而希望用Calendar类代替Date类,然而Calendar类也是不尽如人意。因此专门在本文中对Java中Date类的基本概念、常见操作及相关类进行总结和归纳,方便日后的开发,希望对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值