pom.xml 添加maven jar
<!-- ical4j begin-->
<dependency>
<groupId>org.mnode.ical4j</groupId>
<artifactId>ical4j</artifactId>
<version>1.0.2</version>
</dependency>
<!-- ical4j end-->
實現代碼:
@Test
public void exportIcs(){
try {
// 創建一個時區(TimeZone)
TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
TimeZone timezone = registry.getTimeZone("GMT");
VTimeZone tz = timezone.getVTimeZone();
// 創建日曆
Calendar calendar = new Calendar();
calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
calendar.getProperties().add(Version.VERSION_2_0);
calendar.getProperties().add(CalScale.GREGORIAN);
// 時間主題
String summary = "Signum showroom opening in San Francisco, USA";
// 開始時間
DateTime start = new DateTime(1679121035000l);
// 開始時間轉換爲UTC時間(UTC + 時區差 = 本地時間 )
start.setUtc(true);
// 結束時間
DateTime end = new DateTime(1679128235000l);
// 結束時間設置成UTC時間(UTC + 時區差 = 本地時間 )
end.setUtc(true);
// 新建普通事件
// VEvent event = new VEvent(start, end, summary);
// 定義全天事件(注意默認是UTC時間)
VEvent event = new VEvent(new Date(1679121035000l), new Date(1679128235000l), summary);
event.getProperties().add(new Location("Yongsan-gu, San Francisco, USA."));
// 生成唯一標示
event.getProperties().add(new Uid(new UidGenerator("iCal4j").generateUid().getValue()));
// 添加時區信息
event.getProperties().add(tz.getTimeZoneId());
// 添加邀請者
Attendee dev1 = new Attendee(URI.create("mailto:[email protected]"));
dev1.getParameters().add(Role.REQ_PARTICIPANT);
// dev1.getParameters().add(new Cn("Robert Zhou"));
Attendee dev2 = new Attendee(URI.create("mailto:[email protected]"));
dev2.getParameters().add(Role.REQ_PARTICIPANT);
// dev2.getParameters().add(new Cn("Sam"));
event.getProperties().add(dev1);
event.getProperties().add(dev2);
// 重複事件
// Recur recur = new Recur(Recur.WEEKLY, Integer.MAX_VALUE);
// recur.getDayList().add(WeekDay.MO);
// recur.getDayList().add(WeekDay.TU);
// recur.getDayList().add(WeekDay.WE);
// recur.getDayList().add(WeekDay.TH);
// recur.getDayList().add(WeekDay.FR);
// RRule rule = new RRule(recur);
// event.getProperties().add(rule);
// 提醒,提前30分鐘
VAlarm valarm = new VAlarm(new Dur(0, 0, -30, 0));
// valarm.getProperties().add(new Summary("Meeting events 20230318"));
valarm.getProperties().add(Action.DISPLAY);
valarm.getProperties().add(new Description("showroom"));
// 將VAlarm加入VEvent
event.getAlarms().add(valarm);
// 添加事件
calendar.getComponents().add(event);
// 驗證
calendar.validate();
FileOutputStream fout = new FileOutputStream("D://my.ics");
CalendarOutputter outputter = new CalendarOutputter();
outputter.output(calendar, fout);
} catch (Exception e) {
e.printStackTrace();
}
}