Object类、Data类及DateFormat类

Object概述

java.lang.Object类是Java语言中的根类,即所有类的父类。一个类都会直接或间接的继承该类,该类提供类一些常用的方法,如toString()、equal()方法

toString()方法

A:作用:打印对象的信息
B:重写前:打印的是包名类名@地址值
C重写后:打印的是对象中的属性值

equal方法

A:作用:比较两个对象
B:重写前:比较的是两个对象的地址值
C:重写后:比较的是两个对象的属性值

实例创建

package Demo08;

import java.util.Objects;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

}


创建测试类

package Demo08;

public class PersonTest {
    public static void main(String[] args) {
        Person p1 = new Person("小明",18);
        Person p2 = new Person("小明",18);

        System.out.println(p1);// 对象类型+@+内存地址
        System.out.println(p1);// Person{name='小明', age=18},重写了String方法

        System.out.println(p1.equals(p2));//  false 比较的是对象
        System.out.println(p1.equals(p2));//  true 重写了equal方法

    }
}

Date类概述

java.util.Date类 表示特定的瞬间,精确到毫秒。
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。

public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
Date类中的多数方法已经过时,常用的方法有:
public long getTime() 把日期对象转换成对应的时间毫秒值。

package Demo08;

import java.util.Date;

public class DateTest {
    public static void main(String[] args) {
        DateMethod();

    }
    public static void DateMethod(){

       /* Data类的空参构造方法:
        Data()获取的就是当前系统的日期和时间*/

        System.out.println(new Date());

       /* Date类的成员方法
        long getTime() 把日期转换为毫秒(相当于System.currentTimeMills())
        返回值1970年1月1日 00:00:00 Data对象表示的毫秒数
         */
        Date date = new Date();
        long time = date.getTime();
        System.out.println(time);

      /*  Date类带参的构造方法:
        Date(long data):传递毫秒值,把毫秒转换为Data日期*/

        Date d1 = new Date(time);
        System.out.println(d1);
    }
}

DateFormat类

java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

  • 格式化:按照指定的格式,从Date对象转换为String对象。
  • 解析:按照指定的格式,从String对象转换为Date对象。

构造方法

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

  • public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
    参数pattern是一个字符串,代表日期时间的自定义格式。
  • 格式规则
    常用的格式规则为:
    在这里插入图片描述
    创建SimpleDateFormat对象的代码如下:
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
DateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒")

注意:格式中的字母不能更改,连接模式的符号可以更改

常用方法

  • String format(Date date):将Date对象格式化为字符串
  • Date parse(String source):将字符串解析为Date对象。
package Demo08;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter;

public class DateFormatTest {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
        String str = df.format(date);
        System.out.println(str);
        Date da = df.parse(str);
        System.out.println(da);
    }
}

实例应用

package Demo08;
/*题目:使用日期相关的API,计算一个人已经出生了多少天
思路:
1、使用Scanner类中的方法next,获取出生日期
2、使用DateFormat类中方法parse 方法把字符串的出生日期解析为Date格式
3、用Data格式把出生日期转换为毫秒值
4、获取当前日期的毫秒值
5、使用当前日期的毫秒值-出生日期的毫秒值
6、把毫秒的差值转换为天(x/1000/60/60/24)
*/

import javax.xml.crypto.Data;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class DataExerciseTest {
    public static void main(String[] args) throws ParseException {
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入你的出生日期,格式为yyyy-MM-dd");
        String birthdayString = sc.next();
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date birthdayFormat = df.parse(birthdayString);
        long birthdayData = birthdayFormat.getTime();
        long curruntData = new Date().getTime();
        System.out.println(new Date());
        long dataGap = curruntData-birthdayData;
        System.out.println(dataGap/1000/60/60/24);


    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Easypoi导出动态列及多级复杂表头可以通过编写自定义的导出来实现,以下是一个示例代码: ```java public class CustomExportUtil { /** * 导出Excel * * @param title 标题 * @param headers 表头 * @param dataList 数据列表 * @param dateFormat 日期格式 * @param response HttpServletResponse对象 * @throws IOException */ public static void exportExcel(String title, List<ExcelHeader> headers, List<Map<String, Object>> dataList, String dateFormat, HttpServletResponse response) throws IOException { // 创建Excel对象 Workbook workbook = new SXSSFWorkbook(1000); // 创建Sheet对象 Sheet sheet = workbook.createSheet(title); // 设置默认列宽 sheet.setDefaultColumnWidth(15); // 创建第一行,设置表头 Row headerRow = sheet.createRow(0); int colIndex = 0; for (ExcelHeader header : headers) { Cell cell = headerRow.createCell(colIndex++); cell.setCellValue(header.getTitle()); // 设置合并单元格 if (header.getColSpan() > 1 || header.getRowSpan() > 1) { CellRangeAddress rangeAddress = new CellRangeAddress(0, header.getRowSpan() - 1, colIndex - 1, colIndex + header.getColSpan() - 2); sheet.addMergedRegion(rangeAddress); } } // 填充数据 int rowIndex = 1; for (Map<String, Object> data : dataList) { Row row = sheet.createRow(rowIndex++); colIndex = 0; for (ExcelHeader header : headers) { // 获取数据 Object value = data.get(header.getFieldName()); // 格式化日期 if (value instanceof Date) { value = new SimpleDateFormat(dateFormat).format(value); } Cell cell = row.createCell(colIndex++); cell.setCellValue(String.valueOf(value)); } } // 设置响应头 response.setContentType("application/octet-stream;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String((title + ".xlsx").getBytes("utf-8"), "iso8859-1")); // 输出Excel文件 OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); } } ``` 其中,ExcelHeader表示表头信息,包括标题、字段名、列合并数、行合并数等信息: ```java public class ExcelHeader { /** * 标题 */ private String title; /** * 字段名 */ private String fieldName; /** * 列合并数 */ private int colSpan; /** * 行合并数 */ private int rowSpan; public ExcelHeader(String title, String fieldName, int colSpan, int rowSpan) { this.title = title; this.fieldName = fieldName; this.colSpan = colSpan; this.rowSpan = rowSpan; } // getter/setter方法省略 } ``` 使用示例: ```java List<ExcelHeader> headers = new ArrayList<>(); headers.add(new ExcelHeader("姓名", "name", 1, 1)); headers.add(new ExcelHeader("年龄", "age", 1, 1)); headers.add(new ExcelHeader("联系方式", null, 2, 1)); headers.add(new ExcelHeader("电话", "phone", 1, 1)); headers.add(new ExcelHeader("邮箱", "email", 1, 1)); headers.add(new ExcelHeader("地址", "address", 1, 1)); headers.add(new ExcelHeader("省份", "province", 1, 1)); headers.add(new ExcelHeader("城市", "city", 1, 1)); headers.add(new ExcelHeader("区县", "county", 1, 1)); List<Map<String, Object>> dataList = new ArrayList<>(); Map<String, Object> data1 = new HashMap<>(); data1.put("name", "张三"); data1.put("age", 20); data1.put("phone", "123456789"); data1.put("email", "zhangsan@example.com"); data1.put("address", "北京市朝阳区"); data1.put("province", "北京市"); data1.put("city", "北京市"); data1.put("county", "朝阳区"); dataList.add(data1); CustomExportUtil.exportExcel("学生信息表", headers, dataList, "yyyy-MM-dd HH:mm:ss", response); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值