繁体   English   中英

我无法使用iCal4j正确设置事件的日期

[英]I can't set properly the dates for an event with iCal4j

我正在使用iCal4j生成一个Spring Boot应用程序的预订日历,但是所有日期都比应该多一个月又少了两天。

例如:(dd / MM / yyyy)for 22/03/2018在iCal中我得到20/04/2018

调试时,我看到所有日期和值都正确。 因此,我想问题始于此类的构造函数:

net.fortuna.ical4j.model.Date

Date start = new Date(arrival);
Date end = new Date(departure);

这是我的方法代码,其中的日期为LocalDate类型

public Calendar getPropertyICal(Integer idproperty) throws SocketException {

    //Initializing an iCal4j calendar
    Calendar iCal = new Calendar();
    iCal.getProperties().add(new ProdId("-//RentalWebs//iCal4j 1.0 by Ben Fortuna//EN"));
    iCal.getProperties().add(Version.VERSION_2_0);
    iCal.getProperties().add(CalScale.GREGORIAN);
    HostInfo host = new SimpleHostInfo("rentalwebs.com");

    List<Booking> upcomingBookings = bookingRepository.getUpcomingBookings(idproperty);

    for(Booking bkng : upcomingBookings){

        java.util.Calendar arrival = java.util.Calendar.getInstance();
        arrival.set(java.util.Calendar.MONTH, bkng.getDatefrom().getMonth().getValue());
        arrival.set(java.util.Calendar.DAY_OF_MONTH, bkng.getDatefrom().getDayOfMonth());
        arrival.set(java.util.Calendar.YEAR, bkng.getDatefrom().getYear());

        LocalDate lastNight = bkng.getDateto().minusDays(1);
        java.util.Calendar departure = java.util.Calendar.getInstance();
        departure.set(java.util.Calendar.MONTH, lastNight.getMonth().getValue());
        departure.set(java.util.Calendar.DAY_OF_MONTH, lastNight.getDayOfMonth());
        departure.set(java.util.Calendar.YEAR, lastNight.getYear());

        Location propertyName = new Location(propertyRepository.getPropertyById(bkng.getIdproperty()).getName());
        String guestName = bkng.getSurname() + ", " + bkng.getName();

        Date start = new Date(arrival);
        Date end = new Date(departure);

        VEvent booking = new VEvent(start, end, guestName);

        UidGenerator ug = new UidGenerator(host, LocalDate.now().toString());//Unique identifier
        booking.getProperties().add(ug.generateUid());
        booking.getProperties().add(propertyName);

        iCal.getComponents().add(booking);

    }

    return iCal;
}

服务器位于法兰克福,并且java.util.Calendar类的构造函数获得了中欧的语言环境,这很好。

Calendar.MONTH是从零开始的,因此,如果您的预订班月使用1-12,则在设置日历时需要减去1。

不确定日期,但可能是4月而不是3月这一事实可能会影响日期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM