gpt4 book ai didi

java - 使用日历对象显示日期

转载 作者:行者123 更新时间:2023-12-01 20:57:26 27 4
gpt4 key购买 nike

我希望使用日历对象来显示日期。

public abstract class Employee implements EmployeeInfo {

protected String firstName;
protected String lastName;
protected String idNumber;
Calendar birthday = Calendar.getInstance();
protected char gender;

public Employee()
{
firstName = "";
lastName = "";
idNumber = "";
gender = ' ';
birthday.set(Calendar.MONTH, 0);
birthday.set(Calendar.DAY_OF_MONTH, 00);
birthday.set(Calendar.YEAR, 0000);
}

public Employee(String first, String last, String id, char gen, int month, int day, int year)
{
firstName = first;
lastName = last;
idNumber = id;
gender = gen;
birthday.set(Calendar.MONTH, month);
birthday.set(Calendar.DAY_OF_MONTH, day);
birthday.set(Calendar.YEAR, year);
}

public Calendar getBirthday() {

return birthday;
}

public void setBirthday(int month, int day, int year, Calendar birthday) throws ParseException {
birthday = Calendar.getInstance();
birthday.set(Calendar.MONTH, month);
birthday.set(Calendar.DAY_OF_MONTH, day);
birthday.set(Calendar.YEAR, year);
SimpleDateFormat formatted = new SimpleDateFormat("MM/dd/yyyy");
String date = month + "/" + day + "/" + year;
Date birth = formatted.parse(date);
birthday.setTime(birth);
this.birthday = birthday;
}

public String toSring()
{
return "ID Employee Number: " + idNumber + "\n" + "Employee name: " + firstName + " "
+ lastName + "\n" + "Birth date: " + birthday + "\n";
}

public abstract double getMonthlyEarning();

public class Staff extends Employee {
protected double hourlyRate;

public Staff()
{
super();
hourlyRate = 0.0;
}

public Staff(String first, String last, String ID, char gen1, int month, int day, int year, double rate)
{
super(first, last, ID, gen1, month, day, year);
hourlyRate = rate;
}

}

…还有…

public class Test {

public static void main(String[] args) {

Employee[] employees = new Employee[2];
employees[0] = new Staff("Minh", "Vu", "123", 'M', 3,06,1997, 50.00);
employees[1] = new Staff("Mike", "Nguyen", "456", 'M', 5,18,1977, 65.00);

for(Employee member : employees)
{
System.out.println(member);
System.out.println("------------------------------------------");
}
}
}

我面临的问题是为什么以下输出中的出生日期给了我一条未知的、长得可笑的行:

ID员工编号:123

员工姓名:Minh Vu

出生日期:java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Los_Angeles",offset=-28800000 ,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth= 2、startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek= 1,ERA=1,YEAR=1997,MONTH=3,WEEK_OF_YEAR=6,WEEK_OF_MONTH=2,DAY_OF_MONTH=6,DAY_OF_YEAR=37,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=2,HOUR_OF_DAY=0,分钟=0,秒=0,毫秒=0,ZONE_OFFSET=-28800000,DST_OFFSET=0]

全职

月薪:$8000.0

<小时/>

ID 员工编号:456

员工姓名:Mike Nguyen

出生日期:java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Los_Angeles",offset=-28800000 ,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth= 2、startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek= 1、ERA=1、年份=1977、月份=5、WEEK_OF_YEAR=6、WEEK_OF_MONTH=2、DAY_OF_MONTH=18、DAY_OF_YEAR=37、DAY_OF_WEEK=2、DAY_OF_WEEK_IN_MONTH=1、AM_PM=1、HOUR=2、HOUR_OF_DAY=0,分钟=0,秒=0,毫秒=0,ZONE_OFFSET=-28800000,DST_OFFSET=0]

全职

月薪:$10400.0

<小时/>

根据我的分析,我相信我必须使用 SimpleDateFormat 类创建一个对象并将“MM/dd/yyyy”放入参数中。但是,我必须通过创建 Date 对象来解析 SimpleDateFormat 对象。我想使用 Calendar 类来创建我的日期对象。

调试时发现出生日期显示错误;它打印了我生日元素中的所有内容。我不知道该怎么办。我们将非常感谢您的帮助。 :)

最佳答案

首先,您应该使用java.time而不是Calendar

第二件事是您不必两次创建日期(您在 setter 中执行此操作)。

最后但并非最不重要的一点是,您必须在打印日期之前对其进行格式化(在 toString() 方法中)

这就是你的 setter 的样子:

public void setBirthday(int month, int day, int year) {
this.birthday.set(Calendar.MONTH, month);
this.birthday.set(Calendar.DAY_OF_MONTH, day);
this.birthday.set(Calendar.YEAR, year);
}

或者更好:

public void setBirthday(Calendar birthday) {
this.birthday = birthday;
}

这就是您的 toString() 方法的样子:

public String toString(){
return "ID Employee Number: " + idNumber + "\n" + "Employee name: " + firstName + " "
+ lastName + "\n" + "Birth date: " + formatter.format(birthday) + "\n";
}

所以您还需要将其添加到您的代码中:

private final static SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");

关于java - 使用日历对象显示日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42078963/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com