【发布时间】:2015-04-09 17:39:53
【问题描述】:
我正在开发一个程序,该程序将成为一个基本功能,如果用户可以检查某些内容,并且该程序将计算截止日期,为简单起见,将在 7 天后。 此函数在其他类中使用,今天已在使用它的类中如此定义
today=Calendar.getInstance();
我正在使用 Calendar 类来执行此操作。 一开始我试过这个
public Calendar getReturnDate()
{
Calendar dueDate = Calendar.getInstance();
dueDate.set(today.MONTH, today.get(today.MONTH));
dueDate.set(today.YEAR, today.get(today.YEAR));
dueDate.add(today.DATE,today.get(today.DATE + 7));
return dueDate;
}
这给了我一个结果,所有内容都打印到毫秒。
所以我研究了 Calendar 类,发现 .add 方法可以完成这项工作......或者我是这么认为的。下面是代码
public Calendar getReturnDate()
{
Calendar dueDate = Calendar.getInstance();
dueDate.set(today.MONTH, today.get(today.MONTH));
dueDate.set(today.YEAR, today.get(today.YEAR));
dueDate.add(today.DATE,7);
return dueDate;
}
当在下面的代码中调用该函数时,会发生下面的打印。
public String toString()
{
//Prints them out
String str = "The specs of the book are: ";
str+= "\n\t Title: " + title;
str+= "\n\t Author: " + year;
str += "\n\t checkout date: " + (getReturnDate().MONTH+1) + "/" + getReturnDate().DATE;
return str;
}
结果:
Title: ABC
Author: Suzie Smith
checkout date: java.util.GregorianCalendar[time=1428600973310,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/New_York",offset=-18000000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,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=2015,MONTH=3,WEEK_OF_YEAR=15,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=99,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=36,SECOND=13,MILLISECOND=310,ZONE_OFFSET=-18000000,DST_OFFSET=3600000]
如您所见,它运行不正常。当我在上面的代码中调用此方法时,我希望它打印出月/年。
有谁知道怎么做或者为什么我的不工作?
来源: https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html
【问题讨论】:
-
“如您所见,它运行不正常。”不,我们真的不能说。您是否只是对字符串表示感到恼火?如果是这样,请使用
SimpleDateFormat。如果这不是问题,请更清楚地描述实际问题。如果您使用的是 Java 8,我还建议使用java.time,否则使用 Joda Time。两者都优于Date和Calendar。 -
那么您的问题是如何将小时、分钟、秒和毫秒设置为 0?或者您是在问是否有办法使用甚至没有这些字段的日期/日历对象?
-
很抱歉给您带来了困惑。我将编辑我的问题