рдЬрд╛рд╡рд╛ рдФрд░ iCalendar рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ

рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдореБрдЭреЗ iCalendar рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдХрдбрд╝реА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореИрдВ iCal4J рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЖрдпрд╛ред рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдпрд╣реА рдЪрд╛рд╣рд┐рдПред рдЖрдЗрдП рдЗрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдХреИрд▓реЗрдВрдбрд░ рдХреА рддреИрдпрд╛рд░реА

Google рдХреИрд▓реЗрдВрдбрд░ рдореЗрдВ, рдореИрдВрдиреЗ 30 рдорд┐рдирдЯ рд╕реЗ 6 рдШрдВрдЯреЗ рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рдЫреЛрдЯрд╛ рдХреИрд▓реЗрдВрдбрд░ рдмрдирд╛рдпрд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ iCal рдХреИрд▓реЗрдВрдбрд░ рдХреЛ рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: Google рдХреИрд▓реЗрдВрдбрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ "рдмрдВрдж рдХреИрд▓реЗрдВрдбрд░ рдкрддреЗ" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╣рд░реЗ рдмрдЯрди "рдЖрдИрд╕реАрдПрдПрд▓" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдпрд╣реА рд╣реИ, рдХреИрд▓реЗрдВрдбрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬрд╛рд╡рд╛ рдХреА рддреИрдпрд╛рд░реА

рдЕрдЧрд▓рд╛ рдХрджрдо рдерд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ред рдЕрдирдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ * .jar рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреИрд▓реЗрдВрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ!

рдХреИрд▓реЗрдВрдбрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рдХреИрд▓реЗрдВрдбрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдФрд░ рдХреИрд▓реЗрдВрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдо рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗ (рджреВрд╕рд░рд╛ рдЗрд╕рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ)ред

//      FileInputStream fin = new FileInputStream("calendar.ics"); //          Calendar CalendarBuilder builder = new CalendarBuilder(); Calendar calendar = builder.build(fin); 


рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖

рдЖрдЗрдП рдЕрдм рд╣рдорд╛рд░реЗ рдХреИрд▓реЗрдВрдбрд░ рдХреА рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдХрдо рд╕реЗ рдХрдо рд╕рд╛рдВрддреНрд╡рдирд╛) рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред

 //    ComponentList listEvent = calendar.getComponents(Component.VEVENT); for (Object elem : listEvent) { //         ,   listEvent   Object VEvent event = (VEvent) elem; //   // getValue()   ,    .   getName()  toString()       DESCRIPTION String description = event.getDescription().getValue(); //    String title = event.getSummary().getValue(); System.out.println(title + " : " + description); } 

рдпрд╣ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо Component.VEVENT рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдмрд┐рд▓реНрдХреБрд▓ рдХреИрд▓реЗрдВрдбрд░ рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреИрд▓реЗрдВрдбрд░ рд╕реЗ рдХреНрдпрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдорд┐рд▓реЗрдЧреА рдЬрд┐рд╕рдореЗрдВ To-Do рдШрдЯрдХ (VTODO), рдиреЛрдЯреНрд╕ (VJOURNAL), рдФрд░ VFREEBUSY, VALARM рдФрд░ VTIMEZONE рдЬреИрд╕реЗ рдЕрдиреНрдп рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред

рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛

рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдШрдЯрдирд╛рдУрдВ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдореЗрдВ, рдЖрдк рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 java.util.Calendar today = java.util.Calendar.getInstance(); today.set(java.util.Calendar.HOUR_OF_DAY, 0); today.clear(java.util.Calendar.MINUTE); today.clear(java.util.Calendar.SECOND); //     1  Period period = new Period(new DateTime(today.getTime()), new Dur(1, 0, 0, 0)); //      Filter filter = new Filter(new PeriodRule(period)); //     List eventsToday = filter.filter(calendar.getComponents(Component.VEVENT)); // ,  eventsToday   ,     


рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдореЗрд░реЗ рдХреИрд▓реЗрдВрдбрд░ (рдкреНрд░рд╛рд░реВрдк "рд╢реАрд░реНрд╖рдХ" рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЧрдП рдереЗ: "рд╡рд┐рд╡рд░рдг" ["рдкреНрд░рд╛рд░рдВрдн рд╕рдордп"]):
рдЗрд╡реЗрдВрдЯ 1: рдЗрд╡реЗрдВрдЯ 1 - 1 рдирд╡рдВрдмрд░ [7 рдирд╡рдВрдмрд░ 2013 13:00:00 GMT]
рдЗрд╡реЗрдВрдЯ 5: рдЗрд╡реЗрдВрдЯ 5 - рдирд╡рдВрдмрд░ 12 [12 рдирд╡рдВрдмрд░ 2013 12:00:00 GMT]
рдЗрд╡реЗрдВрдЯ 3: рдЗрд╡реЗрдВрдЯ 3 - 10 рдирд╡рдВрдмрд░ [10 рдирд╡рдВрдмрд░ 2013 19:30:00 GMT]
рдЗрд╡реЗрдВрдЯ 2: рдЗрд╡реЗрдВрдЯ 2 - 9 рдирд╡рдВрдмрд░ [9 рдирд╡рдВрдмрд░ 2013 08:30:00 GMT]
рдЗрд╡реЗрдВрдЯ 4: рдЗрд╡реЗрдВрдЯ 4 - 11 рдирд╡рдВрдмрд░ [11 рдирд╡рдВрдмрд░ 2013 08:00:00 GMT]
рдЗрд╡реЗрдВрдЯ 6: рдЗрд╡реЗрдВрдЯ 6 - 13 рдирд╡рдВрдмрд░ [13 рдирд╡рдВрдмрд░ 2013 09:30:00 GMT]

рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдШрдЯрдирд╛рдУрдВ (11 рдирд╡рдВрдмрд░) рдХреЗ рд╕рдорд╛рдкрди рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдШрдЯрдирд╛ рдорд┐рд▓реА - рдЗрд╡реЗрдВрдЯ 4:
рдЗрд╡реЗрдВрдЯ 4: рдЗрд╡реЗрдВрдЯ 4 - 11 рдирд╡рдВрдмрд░ [11 рдирд╡рдВрдмрд░ 2013 08:00:00 GMT]

рдкреАрд░рд┐рдпрдб рдмрдврд╝рд╛рдХрд░ рддреАрди рджрд┐рди ...
 Period period = new Period(new DateTime(today.getTime()), new Dur(3, 0, 0, 0)); 

... рдореБрдЭреЗ рдпрд╣ рдЪрд┐рддреНрд░ рдорд┐рд▓рд╛:
рдЗрд╡реЗрдВрдЯ 5: рдЗрд╡реЗрдВрдЯ 5 - рдирд╡рдВрдмрд░ 12 [12 рдирд╡рдВрдмрд░ 2013 12:00:00 GMT]
рдЗрд╡реЗрдВрдЯ 4: рдЗрд╡реЗрдВрдЯ 4 - 11 рдирд╡рдВрдмрд░ [11 рдирд╡рдВрдмрд░ 2013 08:00:00 GMT]
рдЗрд╡реЗрдВрдЯ 6: рдЗрд╡реЗрдВрдЯ 6 - 13 рдирд╡рдВрдмрд░ [13 рдирд╡рдВрдмрд░ 2013 09:30:00 GMT]


рдПрдХ рдЦрд╛рд▓реА рдХреИрд▓реЗрдВрдбрд░ рдмрдирд╛рдПрдВ

iCal4j рднреА рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХ рдХреИрд▓реЗрдВрдбрд░ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рдо рдПрдХ рдХреИрд▓реЗрдВрдбрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

 Calendar calendar = new Calendar(); calendar.getProperties().add(new ProdId("-//habrahabr")); calendar.getProperties().add(Version.VERSION_2_0); calendar.getProperties().add(CalScale.GREGORIAN); 


рдХреИрд▓реЗрдВрдбрд░ рдореЗрдВ рдПрдХ рдирдИ рдШрдЯрдирд╛ рдЬреЛрдбрд╝реЗрдВ

рдпрд╣ рдШрдЯрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЬрд▓реНрджреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

 //    TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry(); TimeZone timezone = registry.getTimeZone("Europe/Minsk"); VTimeZone tz = timezone.getVTimeZone(); //  10   18:00 java.util.Calendar startDate = new GregorianCalendar(); startDate.setTimeZone(timezone); startDate.set(java.util.Calendar.MONTH, java.util.Calendar.NOVEMBER); startDate.set(java.util.Calendar.DAY_OF_MONTH, 10); startDate.set(java.util.Calendar.YEAR, 2013); startDate.set(java.util.Calendar.HOUR_OF_DAY, 18); startDate.set(java.util.Calendar.MINUTE, 0); startDate.set(java.util.Calendar.SECOND, 0); //       20:00 java.util.Calendar endDate = new GregorianCalendar(); endDate.setTimeZone(timezone); endDate.set(java.util.Calendar.MONTH, java.util.Calendar.NOVEMBER); endDate.set(java.util.Calendar.DAY_OF_MONTH, 10); endDate.set(java.util.Calendar.YEAR, 2013); endDate.set(java.util.Calendar.HOUR_OF_DAY, 20); endDate.set(java.util.Calendar.MINUTE, 0); endDate.set(java.util.Calendar.SECOND, 0); //   String eventName = "- "; DateTime start = new DateTime(startDate.getTime()); DateTime end = new DateTime(endDate.getTime()); VEvent meeting = new VEvent(start, end, eventName); //        meeting.getProperties().add(tz.getTimeZoneId()); //    Calendar icsCalendar = new Calendar(); icsCalendar.getProperties().add(new ProdId("-//habrahabr")); icsCalendar.getProperties().add(CalScale.GREGORIAN); //      icsCalendar.getComponents().add(meeting); 


рдХрд┐рд╕реА рдХреИрд▓реЗрдВрдбрд░ рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛

рдХреИрд▓реЗрдВрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рд╕рд╣реЗрдЬрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред

 FileOutputStream fout = new FileOutputStream("calendar.ics"); CalendarOutputter out = new CalendarOutputter(); out.output(calendar, fout); 


рдирд┐рд╖реНрдХрд░реНрд╖

рд╣рдордиреЗ iCal4j рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдмреБрдирд┐рдпрд╛рджреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдмреЗрд╢рдХ, рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛рдПрдВ рдХреЗрд╡рд▓ рдХреИрд▓реЗрдВрдбрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдИрд╡реЗрдВрдЯ рдмрдирд╛рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ, рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╕реНрдерд╛рди рдмрдирд╛рдиреЗ, рдЕрддрд┐рдерд┐ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн:
  1. ICalendar рдХрд╛ рд╡рд┐рд╡рд░рдг
  2. ICal4j рдкреНрд░рд▓реЗрдЦрди
  3. iCal4j Wiki (рдЖрдк рдпрд╣рд╛рдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)

Source: https://habr.com/ru/post/In201660/


All Articles