微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的实体类中有一个 GregorianCalender,如何在 toString() 中创建一个具有特定日期并以特定格式显示的对象?

如何解决我的实体类中有一个 GregorianCalender,如何在 toString() 中创建一个具有特定日期并以特定格式显示的对象?

public class Book {
    Calendar dateOfPublish;

    Book(Calendar dateOfPublish,...){}

    public Calendar getDateOfPublish() {
        return dateOfPublish;
    }

    public void setDateOfPublish(int day,int month,int year) {
        this.dateOfPublish = dateOfPublish;
    }

    public String toString() {
                return Date Of Publish=" + dateOfPublish.YEAR + "/" + dateOfPublish.MONTH + "/" + 
                       dateOfPublish.DATE;
    }
}

我尝试使用 this 作为日历数据字段中的参数实例化一个书对象。

new Book(new GregorianCalendar(2018,3,20));

但是当我用 toString() 显示对象时,它显示

Results:    
Date Of Publish=1/2/5

我在互联网上搜索过,看到有些人使用 SimpleDateFormat,但它可以在实体类中完成吗?或者我应该使用什么更好的日期/日历类?

解决方法

您已使用与在 Java 中可用的任何日期类型的构造函数中找到的参数完全相反的顺序来声明您的方法。

public void setDateOfPublish(int day,int month,int year) {
    //...
}

方法声明中参数的顺序应该与你传递给它的参数的顺序相匹配,因此我建议你按如下方式声明你的方法以避免意外:

public void setDateOfPublish(int year,int day) {
    //...
}

此外,java.util 日期时间 API 及其格式 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API

使用现代日期时间 API,您可以按如下方式进行:

import java.time.LocalDate;

class Book {
    LocalDate dateOfPublish;

    // ...

    public void setDateOfPublish(LocalDate dateOfPublish) {
        this.dateOfPublish = dateOfPublish;
    }

    public void setDateOfPublish(int year,int day) {
        this.dateOfPublish = LocalDate.of(year,month,day);
    }

    public String toString() {
        return "Date Of Publish=" + dateOfPublish;
    }
}

public class Main {
    public static void main(String[] args) {
        Book book1 = new Book();
        book1.setDateOfPublish(LocalDate.of(2018,3,20));
        System.out.println(book1);

        Book book2 = new Book();
        book2.setDateOfPublish(2020,2,10);
        System.out.println(book2);
    }
}

输出:

Date Of Publish=2018-03-20
Date Of Publish=2020-02-10

Trail: Date Time 了解有关现代日期时间 API 的更多信息。

,

使用新类:

LocalDate dateOfPublish = LocalDate.of(2018,03,2);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
System.out.println(dtf.format(dateOfPublish));

有关详细信息,请参阅DateTimeFormatter

,

是这些:

public String toString() {
        return "Date Of Publish = " + dateOfPublish.get(Calendar.YEAR) + " / " + dateOfPublish.get(Calendar.MONTH) + " / " +
                dateOfPublish.get(Calendar.DATE);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。