【问题标题】:Calendar Class "Normal" Date issue日历类“正常”日期问题
【发布时间】: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。两者都优于DateCalendar
  • 那么您的问题是如何将小时、分钟、秒和毫秒设置为 0?或者您是在问是否有办法使用甚至没有这些字段的日期/日历对象?
  • 很抱歉给您带来了困惑。我将编辑我的问题

标签: java calendar


【解决方案1】:
public String toString() {
    Calendar returnDate = getReturnDate();
    // 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: " + (returnDate.get(Calendar.MONTH) + 1) + "/" + returnDate.get(Calendar.DATE);
    return str;
}

【讨论】:

  • 问题是我不希望它打印所有不需要的东西,我只是希望它打印出月/年。请看我的问题编辑。
  • 是“月/日”还是“月/年”?只需将我的答案“returnDate.get(Calendar.DATE)”更改为“returnDate.get(Calendar.YEAR)”即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多