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

Java 我的entity类中有一个GregorianCalendar,如何在toString()中创建一个具有特定日期并以特定格式显示的对象?,java,calendar,simpledateformat,gregorian-calendar,Java,Calendar,Simpledateformat,Gregorian Calendar,我尝试在日历数据字段中使用此参数实例化book对象 public class Book { Calendar dateOfPublish; Book(Calendar dateOfPublish, ...){} public Calendar getDateOfPublish() { return dateOfPublish; } public void setDateOfPublish(int day, int month, int

我尝试在日历数据字段中使用此参数实例化book对象

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;
    }
}
但是当我用toString()显示对象时,它会显示

new Book(new GregorianCalendar(2018,3,20));
我在互联网上搜索过,看到一些人使用的是
SimpleDateFormat
,但它可以在实体类中完成吗?或者我应该使用更好的日期/日历类吗?

使用新类:

Results:    
Date Of Publish=1/2/5
有关详细信息,请参阅使用新类:

Results:    
Date Of Publish=1/2/5
有关详细信息,请参阅以下内容:

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

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

您已经用与Java中任何日期类型的构造函数中的参数完全相反的顺序声明了您的方法

public String toString() {
        return "Date Of Publish = " + dateOfPublish.get(Calendar.YEAR) + " / " + dateOfPublish.get(Calendar.MONTH) + " / " +
                dateOfPublish.get(Calendar.DATE);
}
方法声明中参数的顺序应与调用它所传递的参数的顺序相匹配,因此我建议您按如下方式声明方法以避免意外:

public void setDateOfPublish(int day, int month, int year) {
    //...
}
另外,
java.util
date-time API及其格式化API
SimpleDataFormat
已经过时,并且容易出错。建议完全停止使用,并切换到

  • 无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7
  • 如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认
使用现代日期时间API,您可以按如下方式执行:

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

import java.time.LocalDate;

class Book {
    LocalDate dateOfPublish;

    // ...

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

    public void setDateOfPublish(int year, int month, 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);
    }
}

了解有关现代日期时间API的更多信息您已使用与Java中任何可用日期类型的构造函数中的参数完全相反的顺序声明了您的方法

public String toString() {
        return "Date Of Publish = " + dateOfPublish.get(Calendar.YEAR) + " / " + dateOfPublish.get(Calendar.MONTH) + " / " +
                dateOfPublish.get(Calendar.DATE);
}
方法声明中参数的顺序应与调用它所传递的参数的顺序相匹配,因此我建议您按如下方式声明方法以避免意外:

public void setDateOfPublish(int day, int month, int year) {
    //...
}
另外,
java.util
date-time API及其格式化API
SimpleDataFormat
已经过时,并且容易出错。建议完全停止使用,并切换到

  • 无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7
  • 如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认
使用现代日期时间API,您可以按如下方式执行:

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

import java.time.LocalDate;

class Book {
    LocalDate dateOfPublish;

    // ...

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

    public void setDateOfPublish(int year, int month, 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);
    }
}

了解有关现代日期时间API的更多信息,我建议您不要使用
GregoriaCalendar
。那门课设计得很糟糕,而且早已过时。请改用
LocalDate
from。我建议您不要使用
gregorianalendar
。那门课设计得很糟糕,而且早已过时。改用
LocalDate
from。它是正确的(月份除外)。将日期格式化为字符串不是推荐的方法(最好使用格式化程序)。(正如我在其他地方所说,我们根本不建议使用
GregoriaCalendar
)。无论如何,感谢您的贡献。这是正确的(本月除外)。将日期格式化为字符串不是推荐的方法(最好使用格式化程序)。(正如我在其他地方所说的,根本不建议使用
GregoriaCalendar
)。无论如何,感谢您的贡献。