Hướng dẫn này mô tả lịch, sự kiện và mối quan hệ giữa chúng.
Lịch
Lịch là một tập hợp các sự kiện có liên quan, cùng với siêu dữ liệu bổ sung như nội dung tóm tắt, múi giờ mặc định, vị trí, v.v. Mỗi lịch được xác định bằng một mã nhận dạng là địa chỉ email. Lịch có thể có nhiều chủ sở hữu.
Sự kiện
Sự kiện là một đối tượng được liên kết với một phạm vi ngày hoặc giờ cụ thể. Các sự kiện được xác định bằng một mã nhận dạng duy nhất. Ngoài ngày giờ bắt đầu và kết thúc, các sự kiện còn chứa những dữ liệu khác như nội dung tóm tắt, nội dung mô tả, vị trí, trạng thái, lời nhắc, tệp đính kèm, v.v.
Các loại sự kiện
Lịch Google hỗ trợ sự kiện một lần và sự kiện định kỳ:
- Một sự kiện đơn lẻ biểu thị một lần xuất hiện riêng biệt.
- Sự kiện định kỳ xác định nhiều lần xuất hiện.
Sự kiện cũng có thể là sự kiện có thời gian hoặc sự kiện diễn ra cả ngày:
- Sự kiện có thời gian xảy ra giữa hai thời điểm cụ thể. Sự kiện có thời gian sử dụng các trường
start.dateTime
vàend.dateTime
để chỉ định thời điểm xảy ra. - Sự kiện cả ngày kéo dài cả ngày hoặc một chuỗi ngày liên tiếp. Sự kiện diễn ra cả ngày sử dụng các trường
start.date
vàend.date
để chỉ định thời điểm diễn ra sự kiện. Xin lưu ý rằng trường múi giờ không có ý nghĩa đối với sự kiện cả ngày.
Người tổ chức
Sự kiện chỉ có một người tổ chức, đó là lịch chứa bản sao chính của sự kiện. Sự kiện cũng có thể có nhiều người tham dự. Người tham dự thường là lịch chính của người dùng được mời.
Sơ đồ sau đây cho thấy mối quan hệ theo khái niệm giữa lịch, sự kiện và các phần tử liên quan khác:
Lịch chính và các lịch khác
Lịch chính là một loại lịch đặc biệt được liên kết với một tài khoản người dùng duy nhất. Lịch này được tạo tự động cho mỗi tài khoản người dùng mới và mã nhận dạng của lịch thường trùng khớp với địa chỉ email chính của người dùng. Miễn là tài khoản đó còn tồn tại, người dùng sẽ không bao giờ xoá hoặc "huỷ quyền sở hữu" lịch chính của tài khoản. Tuy nhiên, bạn vẫn có thể chia sẻ ảnh và video đó với người dùng khác.
Ngoài lịch chính, bạn có thể tạo rõ ràng bất kỳ số lượng lịch nào khác; những lịch này có thể được sửa đổi, xoá và chia sẻ giữa nhiều người dùng.
Lịch và danh sách lịch
Tập hợp Calendars (Lịch) đại diện cho tất cả các lịch hiện có. Bạn có thể dùng API này để tạo và xoá lịch. Bạn cũng có thể truy xuất hoặc đặt các thuộc tính chung được chia sẻ giữa tất cả người dùng có quyền truy cập vào lịch. Ví dụ: tiêu đề và múi giờ mặc định của lịch là các thuộc tính chung.
CalendarList là một tập hợp gồm tất cả các mục lịch mà người dùng đã thêm vào danh sách của họ (xuất hiện ở bảng điều khiển bên trái của giao diện người dùng web). Bạn có thể dùng phương thức này để thêm và xoá các lịch hiện có vào/khỏi danh sách người dùng. Bạn cũng có thể dùng đối tượng này để truy xuất và đặt các giá trị của thuộc tính lịch dành riêng cho người dùng, chẳng hạn như lời nhắc mặc định. Một ví dụ khác là màu nền trước, vì mỗi người dùng có thể đặt màu khác nhau cho cùng một lịch.
Bảng sau đây so sánh ý nghĩa của các thao tác đối với hai tập hợp:
Hoạt động | Lịch | CalendarList |
---|---|---|
insert |
Tạo một lịch phụ mới. Theo mặc định, lịch này cũng được thêm vào danh sách lịch của nhà sáng tạo. | Chèn một lịch hiện có vào danh sách của người dùng. |
delete |
Xoá một lịch phụ. | Xoá một lịch khỏi danh sách của người dùng. |
get |
Truy xuất siêu dữ liệu lịch, ví dụ: tiêu đề, múi giờ. | Truy xuất siêu dữ liệu cộng với thông tin tuỳ chỉnh dành riêng cho người dùng, chẳng hạn như màu sắc hoặc lời nhắc ghi đè. |
patch /update |
Sửa đổi siêu dữ liệu lịch. | Sửa đổi các thuộc tính lịch dành riêng cho người dùng. |
Sự kiện định kỳ
Một số sự kiện diễn ra nhiều lần theo lịch trình thường xuyên, chẳng hạn như các cuộc họp hằng tuần, ngày sinh nhật và ngày lễ. Ngoài việc có thời gian bắt đầu và thời gian kết thúc khác nhau, những sự kiện lặp lại này thường giống hệt nhau.
Sự kiện được gọi là định kỳ nếu sự kiện đó lặp lại theo một lịch biểu đã xác định. Sự kiện đơn lẻ là sự kiện không định kỳ và chỉ diễn ra một lần.
Quy tắc lặp lại
Lịch biểu cho một sự kiện định kỳ được xác định thành hai phần:
Các trường bắt đầu và kết thúc (xác định lần xuất hiện đầu tiên, như thể đây chỉ là một sự kiện đơn lẻ độc lập) và
Trường lặp lại của sự kiện (xác định cách sự kiện sẽ được lặp lại theo thời gian).
Trường sự kiện định kỳ chứa một mảng gồm các chuỗi đại diện cho một hoặc nhiều thuộc tính RRULE
, RDATE
hoặc EXDATE
như được xác định trong RFC 5545.
Thuộc tính RRULE
là quan trọng nhất vì thuộc tính này xác định một quy tắc thông thường để lặp lại sự kiện. Nó bao gồm một số thành phần. Một số trong số đó là:
FREQ
– Tần suất lặp lại sự kiện (chẳng hạn nhưDAILY
hoặcWEEKLY
). Bắt buộc.INTERVAL
– Hoạt động cùng vớiFREQ
để chỉ định tần suất lặp lại sự kiện. Ví dụ:FREQ=DAILY;INTERVAL=2
có nghĩa là một lần sau mỗi hai ngày.COUNT
– Số lần sự kiện này sẽ lặp lại.UNTIL
– Ngày hoặc ngày giờ mà sự kiện sẽ được lặp lại cho đến (bao gồm).BYDAY
– Các ngày trong tuần mà sự kiện sẽ lặp lại (SU
,MO
,TU
, v.v.). Các thành phần tương tự khác bao gồmBYMONTH
,BYYEARDAY
vàBYHOUR
.
Thuộc tính RDATE
chỉ định thêm ngày hoặc ngày giờ mà sự kiện sẽ diễn ra. Ví dụ: RDATE;VALUE=DATE:19970101,19970120
.
Sử dụng phương thức này để thêm các lần xuất hiện bổ sung không thuộc RRULE
.
Thuộc tính EXDATE
tương tự như RDATE, nhưng chỉ định ngày hoặc ngày giờ mà sự kiện không nên diễn ra. Tức là bạn nên loại trừ những trường hợp đó. Tham số này phải trỏ đến một thực thể hợp lệ do quy tắc lặp lại tạo ra.
EXDATE
và RDATE
có thể có múi giờ và phải là ngày (không phải ngày giờ) đối với các sự kiện diễn ra cả ngày.
Mỗi thuộc tính có thể xuất hiện nhiều lần trong trường sự kiện định kỳ.
Sự lặp lại được xác định là hợp của tất cả các quy tắc RRULE
và RDATE
, trừ đi những quy tắc bị loại trừ bởi tất cả các quy tắc EXDATE
.
Dưới đây là một số ví dụ về sự kiện định kỳ:
Một sự kiện diễn ra từ 6 giờ sáng đến 7 giờ sáng vào mỗi thứ Ba và thứ Sáu, bắt đầu từ ngày 15 tháng 9 năm 2015 và dừng lại sau lần thứ năm vào ngày 29 tháng 9:
... "start": { "dateTime": "2015-09-15T06:00:00+02:00", "timeZone": "Europe/Zurich" }, "end": { "dateTime": "2015-09-15T07:00:00+02:00", "timeZone": "Europe/Zurich" }, "recurrence": [ "RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=TU,FR" ], …
Một sự kiện diễn ra cả ngày bắt đầu từ ngày 1 tháng 6 năm 2015 và lặp lại sau mỗi 3 ngày trong suốt tháng, ngoại trừ ngày 10 tháng 6 nhưng bao gồm ngày 9 và ngày 11 tháng 6:
... "start": { "date": "2015-06-01" }, "end": { "date": "2015-06-02" }, "recurrence": [ "EXDATE;VALUE=DATE:20150610", "RDATE;VALUE=DATE:20150609,20150611", "RRULE:FREQ=DAILY;UNTIL=20150628;INTERVAL=3" ], …
Trường hợp và ngoại lệ
Sự kiện lặp lại bao gồm một số phiên bản: các lần xuất hiện cụ thể của sự kiện tại những thời điểm khác nhau. Những phiên bản này đóng vai trò là sự kiện.
Các nội dung sửa đổi đối với sự kiện định kỳ có thể ảnh hưởng đến toàn bộ sự kiện định kỳ (và tất cả các lần diễn ra của sự kiện đó) hoặc chỉ ảnh hưởng đến từng lần diễn ra. Những sự kiện định kỳ có điểm khác biệt so với sự kiện định kỳ mẹ được gọi là ngoại lệ.
Ví dụ: một ngoại lệ có thể có nội dung tóm tắt khác, thời gian bắt đầu khác hoặc có thêm người tham dự chỉ được mời đến phiên bản đó. Bạn cũng có thể huỷ hoàn toàn một lần xuất hiện mà không cần xoá sự kiện định kỳ (lần huỷ xuất hiện sẽ xuất hiện trong sự kiện status
).
Bạn có thể xem các ví dụ về cách xử lý sự kiện và phiên bản định kỳ thông qua API Lịch Google tại đây.
Múi giờ
Múi giờ chỉ định một khu vực tuân theo giờ chuẩn đồng nhất. Trong Google Calendar API, bạn chỉ định múi giờ bằng cách sử dụng giá trị nhận dạng múi giờ IANA.
Bạn có thể đặt múi giờ cho cả lịch và sự kiện. Các phần sau đây mô tả ảnh hưởng của những chế độ cài đặt này.
Múi giờ của lịch
Múi giờ của lịch còn được gọi là múi giờ mặc định do ảnh hưởng của múi giờ này đến kết quả truy vấn. Múi giờ của lịch ảnh hưởng đến cách các phương thức events.get()
, events.list()
và events.instances()
diễn giải hoặc trình bày các giá trị thời gian.
- Chuyển đổi múi giờ của kết quả truy vấn
- Kết quả của các phương thức
get()
,list()
vàinstances()
được trả về theo múi giờ mà bạn chỉ định trong tham sốtimeZone
. Nếu bạn bỏ qua tham số này, thì tất cả các phương thức này đều sử dụng múi giờ của lịch làm mặc định. - So khớp các sự kiện cả ngày với các truy vấn có khoảng thời gian
- Các phương thức
list()
vàinstances()
cho phép bạn chỉ định bộ lọc thời gian bắt đầu và thời gian kết thúc, trong đó phương thức này trả về các thực thể nằm trong phạm vi đã chỉ định. Múi giờ trên lịch được dùng để tính thời gian bắt đầu và kết thúc của các sự kiện diễn ra cả ngày nhằm xác định xem các sự kiện đó có nằm trong quy cách bộ lọc hay không.
Múi giờ của sự kiện
Các phiên bản sự kiện có thời gian bắt đầu và kết thúc; quy cách cho những thời gian này có thể bao gồm cả múi giờ. Bạn có thể chỉ định múi giờ theo nhiều cách; tất cả các cách sau đây đều chỉ định cùng một thời gian:
- Thêm độ lệch múi giờ vào trường
dateTime
, ví dụ:2017-01-25T09:00:00-0500
. - Chỉ định thời gian không có độ lệch, ví dụ:
2017-01-25T09:00:00
, để trống trườngtimeZone
(thao tác này sẽ ngầm sử dụng múi giờ mặc định). - Chỉ định thời gian không có độ lệch, ví dụ:
2017-01-25T09:00:00
, nhưng sử dụng trườngtimeZone
để chỉ định múi giờ.
Bạn cũng có thể chỉ định thời gian diễn ra sự kiện theo giờ UTC nếu muốn:
- Chỉ định thời gian theo giờ UTC:
2017-01-25T14:00:00Z
hoặc sử dụng độ lệch bằng 02017-01-25T14:00:00+0000
.
Trong tất cả các trường hợp này, nội dung biểu thị nội bộ của thời gian diễn ra sự kiện đều giống nhau, nhưng việc đặt trường timeZone
sẽ đính kèm múi giờ vào sự kiện, giống như khi bạn đặt múi giờ của sự kiện bằng giao diện người dùng Lịch:
Múi giờ của sự kiện định kỳ
Đối với các sự kiện định kỳ, bạn phải luôn chỉ định một múi giờ. Bạn cần có quyền này để mở rộng các lần lặp lại của sự kiện.