在Java中为每个日期存储一个int

时间:2016-03-28 00:43:45

标签: java calendar

无论如何,Calendar类中的每个日期都存储整数吗?例如,6月5日可以存储数字5。

我想要这个功能,因为我正在为房间编写预订系统,每个预订请求都有不同的身份证号码。所以我想要一个日历对象来存储每天的ID号。

2 个答案:

答案 0 :(得分:0)

我希望有更好的方法来组织您的实体关系。 如果您在一天内有多个预订请求,那么将所有预订ID添加到该日期是没有意义的。相反,在每个预订中,都有一个名为requestedDate的字段,并将所请求的日期存储起来。当您需要在单个日期发出的所有请求时,您可以使用此字段对其进行过滤。

根据您当前的需要,您可以使用子类GregorianCalendar类,并使用getter和setter添加此变量bookingId

import java.util.GregorianCalendar;

public class BookingCalendar extends GregorianCalendar {

    private Integer bookingId;

    public Integer getBookingId() {
        return bookingId;
    }

    public void setBookingId(Integer bookingId) {
        this.bookingId = bookingId;
    }
}

测试一下:

public class CheckCal {
    public static void main(String[] args) {
        BookingCalendar cal = new BookingCalendar();
        System.out.println(cal.getTime()); //Mon Mar 28 06:30:24 IST 2016
        cal.setBookingId(25);
        System.out.println(cal.getBookingId()); //25
    }
}

答案 1 :(得分:0)

除非您实现自己的(例如)java.util.Calendar的子类,否则无法在GregorianCalendar对象中存储额外信息。

如果我们可以从您的示例中推断出您要存储的号码是“每月的某天”,那么您无需存储它。

  int dayOfTheMonth = cal.get(Calendar.DAY_OF_THE_MONTH);

否则,您应使用Map表示日期和数字之间的关联。最好使用不可变日期类型作为键; e.g。

  Map<LocalDate, Integer> dateNumbers = new TreeMap<>();

(如果您使用Calendar作为键类型,而某些代码称为set操作来更改键,则地图的不变量将无效。)

或者,如果您的“日历”等同于日期数组,则可以将其设为具有日期字段和数字字段的对象数组。例如:

  public class Booking {
      private Room room;
      private LocalDate date;
      private int id;
      // constructor, getters
  }

  public class Bookings {
      // data structures representing all bookings, possibly
      // with maps for fast lookups.

      // methods for looking up bookings by id, date, room
      // methods for adding / removing / updating bookings
      // methods finding free rooms for a given day or day range
  }