我目前正在尝试发送日历邀请,我为此编写了以下代码:
private void setEventProperties(VEvent vEvent, CalendarDto dto){
vEvent.setSummary(dto.getTitle());
vEvent.setDescription(dto.getDescription());
vEvent.setDateStart(Date.from(dto.getStartDate()));
vEvent.setDateEnd(Date.from(dto.getEndDate()));
vEvent.setOrganizer(dto.getOrganizer());
vEvent.setLocation((String) dto.getMeetingInfo().get("meetingUrl"));
vEvent.setUrl((String) dto.getMeetingInfo().get("meetingUrl"));
for(Attendee attendee: dto.getAttendees()){
attendee.setParticipationLevel(ParticipationLevel.REQUIRED);
vEvent.addAttendee(attendee);
}
}
private String createCalendar(String uuid, CalendarDto dto){
ICalendar iCalendar = new ICalendar();
TimeZone javaTz = TimeZone.getTimeZone("Europe/Istanbul");
String globalId = "Europe/Istanbul";
TimezoneAssignment istanbul = new TimezoneAssignment(javaTz, globalId);
iCalendar.getTimezoneInfo().setDefaultTimezone(istanbul);
iCalendar.addProperty(new Method(Method.REQUEST));
iCalendar.setProductId("----");
VEvent vEvent = new VEvent();
vEvent.setUid(uuid);
vEvent.setStatus(Status.confirmed());
vEvent.setSequence(0);
Date createdDate = new Date();
vEvent.setCreated(createdDate);
vEvent.setLastModified(createdDate);
setEventProperties(vEvent, dto);
iCalendar.addEvent(vEvent);
log.info("Calendar event created with id = '{}'", vEvent.getUid().getValue());
return Biweekly.write(iCalendar).go();
}
这里我尝试将时区设置为“欧洲/伊斯坦布尔”,即 GMT+3,但在 gmail 中它被写为 UTC。我还检查了生成的ics文件。
DTSTAMP:20240123T205158Z 状态:已确认 序列:0 创建时间:20240123T205158Z 最后修改:20240123T205158Z DTSTART;TZID=/欧洲/伊斯坦布尔:20240124T130000 DTEND;TZID=/欧洲/伊斯坦布尔:20240124T140000
造成这种行为的原因可能是什么?我已经用不同的 gmail 尝试过,在某些帐户中它正确设置为 GMT+3,但我不知道原因。 版本:biweekly-0.6.7 Java-17
这实际上是我的错误。我的一些 Gmail 地址有不同的时区。这就是为什么我将时区设置为 UTC 的原因。抱歉问这个问题!