Files
homepage/docs/zh-hans/projects/calendar-toolbox/api.md
T

12 KiB
Raw Blame History

title
title
Calendar Toolbox API

包结构概览

库的代码组织在基础包 com.onixbyte.calendar 下,结构如下:

描述
com.onixbyte.calendar 根日历对象
com.onixbyte.calendar.component iCalendar 组件(VEVENT、VTODO 等)
com.onixbyte.calendar.component.property 组件级属性
com.onixbyte.calendar.property 日历级属性
com.onixbyte.calendar.parameter iCalendar 属性参数
com.onixbyte.calendar.recurrence 重复规则类型
com.onixbyte.calendar.value 值类型
com.onixbyte.calendar.util 格式化工具类

Calendar

表示 iCalendarRFC 5545VCALENDAR 容器的顶层对象。

Calendar calendar = Calendar.builder()
    .withCalendarScale(...)
    .withMethod(...)
    .withProductIdentifier(...)
    .withVersion(...)
    .withOwner(...)
    .withPrimaryCalendar(...)
    .withPublishedTTL(...)
    .withCalendarDescription(...)
    .withCalendarName(...)
    .withCalendarId(...)
    .withCustomProperties(...)
    .withComponents(event, todo, ...)
    .build();

String icsContent = calendar.formatted();

日历属性

所有日历级属性位于 com.onixbyte.calendar.property,实现 CalendarProperty 接口。

iCalendar 属性 描述
CalendarScale CALSCALE 日历系统(例如 GREGORIAN
Method METHOD iCalendar 方法(例如 PUBLISH、REQUEST
ProductIdentifier PRODID 日历的产品标识符
Version VERSION iCalendar 版本(例如 2.0
Owner X-OWNER 日历所有者
PrimaryCalendar X-PRIMARY-CALENDAR 是否为主日历
PublishedTTL X-PUBLISHED-TTL 已发布日历的生存时间
CalendarDescription X-CALENDAR-DESC 日历描述
CalendarName X-CALENDAR-NAME 日历名称
CalendarId X-CALENDAR-ID 日历标识符
CustomCalendarProperty X-* 自定义日历属性

自定义属性使用 Builder 创建:

var customProp = CustomCalendarProperty.builder()
    .withParameters(...)
    .build("X-MY-PROPERTY", "my-value");

注意:自定义属性名称必须X- 开头。


组件

组件是 iCalendar 对象的核心实体。每个组件实现 CalendarComponent 接口,并在 BEGIN:TYPEEND:TYPE 定界符之间渲染。

EventVEVENT

表示一个预定的活动/事件。

Event event = Event.builder()
    .withDateTimeStamp(dtstamp)        // 必需
    .withUniqueIdentifier(uid)         // 必需
    .withDateTimeStart(dtstart)
    .withDateTimeEnd(dtend)            // 与 duration 互斥
    .withDuration(duration)            // 与 dtend 互斥
    .withSummary(summary)
    .withDescription(description)
    .withClassification(classification)
    .withDateTimeCreated(dateTimeCreated)
    .withGeographicPosition(geoPos)
    .withLastModified(lastModified)
    .withLocation(location)
    .withOrganiser(organiser)
    .withPriority(priority)
    .withSequenceNumber(seqNumber)
    .withStatus(status)
    .withTimeTransparency(transparency)
    .withUniformResourceLocator(url)
    .withRecurrenceId(recurrenceId)
    .withRecurrenceRule(rrule)
    .withAttachments(attachments)
    .withAttendees(attendees)
    .withCategories(categories)
    .withComments(comments)
    .withContacts(contacts)
    .withExceptionDateTimes(exDates)
    .withRequestStatuses(statuses)
    .withRelated(related)
    .withResources(resources)
    .withRecurrenceDateTimes(rDates)
    .build();

TodoVTODO

表示待办事项或任务。

Todo todo = Todo.builder()
    .withDateTimeStamp(dtstamp)        // 必需
    .withUniqueIdentifier(uid)         // 必需
    .withSummary(summary)
    .withDateTimeStart(dtstart)
    .withDateTimeDue(due)              // 与 duration 互斥
    .withDuration(duration)            // 与 due 互斥
    .withDateTimeCompleted(completed)
    .withPercentComplete(percent)
    .withClassification(classification)
    .withDateTimeCreated(created)
    .withDescription(description)
    .withGeographicPosition(geoPos)
    .withLastModified(lastModified)
    .withLocation(location)
    .withOrganiser(organiser)
    .withPriority(priority)
    .withSequenceNumber(seq)
    .withStatus(status)
    .withRecurrenceId(recurId)
    .withRecurrenceRule(rrule)
    .withUniformResourceLocator(url)
    .withAttachments(attachments)
    .withAttendees(attendees)
    .withCategories(categories)
    .withComments(comments)
    .withContacts(contacts)
    .withExceptionDateTimes(exDates)
    .withRequestStatuses(statuses)
    .withRelatedToList(related)
    .withResources(resources)
    .withRecurrenceDateTimes(rDates)
    .build();

JournalVJOURNAL

表示日记条目或笔记。

Journal journal = Journal.builder()
    .withDateTimeStamp(dtstamp)        // 必需
    .withUniqueIdentifier(uid)         // 必需
    .withSummary(summary)
    .withClassification(classification)
    .withDateTimeCreated(created)
    .withDateTimeStart(dtstart)
    .withLastModified(lastModified)
    .withOrganiser(organiser)
    .withRecurrenceId(recurId)
    .withSequenceNumber(seq)
    .withStatus(status)
    .withUniformResourceLocator(url)
    .withRecurrenceRule(rrule)
    .withAttachments(attachments)
    .withAttendees(attendees)
    .withCategories(categories)
    .withComments(comments)
    .withContacts(contacts)
    .withDescriptions(descriptions)
    .withExceptionDateTimes(exDates)
    .withRelatedToList(related)
    .withRecurrenceDate(rDates)
    .withRequestStatuses(statuses)
    .build();

FreeBusyVFREEBUSY

表示空闲/忙碌时间信息。

FreeBusy freeBusy = FreeBusy.builder()
    .withDateTimeStamp(dtstamp)        // 必需
    .withUniqueIdentifier(uid)         // 必需
    .withContact(contact)
    .withDateTimeStart(dtstart)
    .withDateTimeEnd(dtend)
    .withOrganiser(organiser)
    .withUniformResourceLocator(url)
    .withAttendees(attendees)
    .withComments(comments)
    .withFreeBusyTimes(freeBusyTimes)
    .withRequestStatuses(statuses)
    .build();

TimeZoneVTIMEZONE

定义时区规则,包括标准时间和夏令时转换。

TimeZone timezone = TimeZone.builder()
    .withTimeZoneIdentifier(tzId)
    .withLastModified(lastModified)
    .withTimeZoneUrl(tzUrl)
    .withTimeZoneProperties(standardProp, daylightProp)
    .build();

时区属性定义实际的转换规则:

TimeZoneProperty standard = TimeZoneProperty.builder()
    .withDateTimeStart(dtstart)
    .withTimeZoneOffsetTo(offsetTo)
    .withTimeZoneOffsetFrom(offsetFrom)
    .withRecurrenceRule(rrule)
    .withTimeZoneNames(tzName)
    .buildStandard();                  // 或 buildDaylight()

TimeZoneProperty daylight = TimeZoneProperty.builder()
    .withDateTimeStart(dtstart)
    .withTimeZoneOffsetTo(offsetTo)
    .withTimeZoneOffsetFrom(offsetFrom)
    .buildDaylight();

AlarmVALARM

定义闹钟/提醒通知。支持三种闹钟类型:

// 音频闹钟
Alarm audioAlarm = Alarm.builder()
    .withTrigger(trigger)
    .withDuration(duration)
    .withRepeatCount(repeatCount)
    .withAttachments(audioAttachment)
    .buildAudio();

// 显示闹钟
Alarm displayAlarm = Alarm.builder()
    .withTrigger(trigger)
    .withDescription(description)      // 必需
    .withDuration(duration)
    .withRepeatCount(repeatCount)
    .buildDisplay();

// 邮件闹钟
Alarm emailAlarm = Alarm.builder()
    .withTrigger(trigger)
    .withDescription(description)      // 必需
    .withSummary(summary)              // 必需
    .withAttendees(attendees)          // 必需
    .withDuration(duration)
    .withRepeatCount(repeatCount)
    .buildEmail();

组件属性

组件属性位于 com.onixbyte.calendar.component.property,实现 ComponentProperty 接口。

iCalendar 属性 描述
Action ACTION 闹钟操作类型(AUDIO、DISPLAY、EMAIL
Attachment ATTACH 文档附件
Attendee ATTENDEE 事件/任务参与者
Categories CATEGORIES 类别或标签
Classification CLASS 访问分类(PUBLIC、PRIVATE、CONFIDENTIAL
Comment COMMENT 评论
Contact CONTACT 联系信息
DateTimeCompleted COMPLETED 完成日期时间
DateTimeCreated CREATED 创建日期时间
DateTimeDue DUE 截止日期时间
DateTimeEnd DTEND 结束日期时间
DateTimeStamp DTSTAMP 日期时间戳
DateTimeStart DTSTART 开始日期时间
Description DESCRIPTION 描述
ExceptionDateTimes EXDATE 例外日期时间
FreeBusyTime FREEBUSY 空闲/忙碌时间段
GeographicPosition GEO 地理位置(纬度/经度)
LastModified LAST-MODIFIED 最后修改日期时间
Location LOCATION 地点
Organiser ORGANIZER 组织者
PercentComplete PERCENT-COMPLETE 完成百分比
Priority PRIORITY 优先级
RecurrenceDateTimes RDATE 重复日期时间
RecurrenceId RECURRENCE-ID 重复实例标识符
RecurrenceRule RRULE 重复规则
RelatedTo RELATED-TO 相关组件引用
RepeatCount REPEAT 闹钟重复次数
RequestStatus REQUEST-STATUS 请求状态
Resources RESOURCES 资源
SequenceNumber SEQUENCE 序列号(修订版本)
Status STATUS 组件状态(TENTATIVE、CONFIRMED、CANCELLED 等)
Summary SUMMARY 标题或摘要
TimeTransparency TRANSP 时间透明度(OPAQUE、TRANSPARENT
TimeZoneIdentifier TZID 时区标识符
TimeZoneName TZNAME 时区名称
TimeZoneOffsetFrom TZOFFSETFROM 相对于 UTC 的时区偏移(原)
TimeZoneOffsetTo TZOFFSETTO 相对于 UTC 的时区偏移(目标)
TimeZoneUrl TZURL 时区 URL
Trigger TRIGGER 闹钟触发器
UniformResourceLocator URL 关联 URL
UniqueIdentifier UID 唯一标识符
CustomComponentProperty X-* 自定义组件属性

参数

参数位于 com.onixbyte.calendar.parameter,为组件属性提供额外限定。

iCalendar 参数 描述
AlarmTriggerRelationship RELATED 触发器关联(START、END
AlternateTextRepresentation ALTREP 替代文本 URI
CalendarUserType CUTYPE 日历用户类型(INDIVIDUAL、GROUP、RESOURCE 等)
CommonName CN 通用名称
Delegatees DELEGATED-TO 受托人
Delegators DELEGATED-FROM 委托人
DirectoryEntryReference DIR 目录条目 URI
FormatType FMTTYPE 格式类型(MIME 类型)
FreeBusyTimeType FBTYPE 空闲/忙碌时间类型
InlineEncoding ENCODING 内联编码(BASE64
Language LANGUAGE 语言
Membership MEMBER 组成员
ParticipationRole ROLE 参与角色(CHAIR、REQ-PARTICIPANT 等)
ParticipationStatus PARTSTAT 参与状态(ACCEPTED、DECLINED 等)
RecurrenceIdentifierRange RANGE 重复范围(THISANDPRIOR、THISANDFUTURE
RelationshipType RELTYPE 关系类型(PARENT、CHILD、SIBLING
RsvpExpectation RSVP RSVP 期望(TRUE、FALSE
SentBy SENT-BY 发送者
TimeZoneIdentifier TZID 时区标识符
ValueDataType VALUE 值数据类型(DATE、DATE-TIME 等)

递归类型

位于 com.onixbyte.calendar.recurrence

描述
Frequency 重复频率常量(DAILY、WEEKLY、MONTHLY、YEARLY),用于重复规则
WeekdayNum 重复规则的星期序号(例如第 2 个星期一)

值类型

位于 com.onixbyte.calendar.value

描述
FreeBusyTimeValue 表示空闲/忙碌时间值
PeriodOfTime 表示一个时间段,包含开始和结束
PropertyValue 属性的基础值类型
UtcOffset UTC 偏移值(例如 -05:00+01:00

格式化输出

所有组件和属性都提供 formatted() 方法,返回符合 iCalendar 规范的字符串。Calendar.formatted() 方法生成完整的 .ics 输出,包含 BEGIN:VCALENDAR/END:VCALENDAR

String ics = calendar.formatted();
// BEGIN:VCALENDAR
// CALSCALE:GREGORIAN
// METHOD:PUBLISH
// ...
// END:VCALENDAR