@@ -0,0 +1,390 @@
---
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
表示 iCalendar( RFC 5545) VCALENDAR 容器的顶层对象。
``` java
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 创建:
``` java
var customProp = CustomCalendarProperty . builder ( )
. withParameters ( . . . )
. build ( " X-MY-PROPERTY " , " my-value " ) ;
```
> 注意:自定义属性名称**必须**以 `X-` 开头。
---
## 组件
组件是 iCalendar 对象的核心实体。每个组件实现 `CalendarComponent` 接口,并在 `BEGIN:TYPE` 和 `END:TYPE` 定界符之间渲染。
### Event( VEVENT)
表示一个预定的活动/事件。
``` java
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 ( ) ;
```
### Todo( VTODO)
表示待办事项或任务。
``` java
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 ( ) ;
```
### Journal( VJOURNAL)
表示日记条目或笔记。
``` java
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 ( ) ;
```
### FreeBusy( VFREEBUSY)
表示空闲/忙碌时间信息。
``` java
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 ( ) ;
```
### TimeZone( VTIMEZONE)
定义时区规则,包括标准时间和夏令时转换。
``` java
TimeZone timezone = TimeZone . builder ( )
. withTimeZoneIdentifier ( tzId )
. withLastModified ( lastModified )
. withTimeZoneUrl ( tzUrl )
. withTimeZoneProperties ( standardProp , daylightProp )
. build ( ) ;
```
时区属性定义实际的转换规则:
``` java
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 ( ) ;
```
### Alarm( VALARM)
定义闹钟/提醒通知。支持三种闹钟类型:
``` java
// 音频闹钟
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` 。
``` java
String ics = calendar . formatted ( ) ;
// BEGIN:VCALENDAR
// CALSCALE:GREGORIAN
// METHOD:PUBLISH
// ...
// END:VCALENDAR
```