Lịch và sự kiện

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ư bản 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. Các lịch có thể có nhiều chủ sở hữu.

Sự kiện

Sự kiện là một đối tượng 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 bắt đầu và ngày kết thúc, các sự kiện còn chứa các dữ liệu khác như thông tin 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ợ các sự kiện mộtđịnh kỳ:

  • Một sự kiện duy nhất thể hiện một lần xuất hiện duy nhất.
  • Sự kiện định kỳ xác định nhiều lần xuất hiện.

Sự kiện cũng có thể được lên lịch hoặc cả ngày:

  • Một sự kiện được tính giờ xảy ra giữa hai thời điểm cụ thể. Các sự kiện có dấu thời gian sử dụng các trường start.dateTimeend.dateTime để chỉ định thời điểm các sự kiện đó xảy ra.
  • Một 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. Các sự kiện cả ngày sử dụng các trường start.dateend.date để chỉ định thời điểm xảy ra. Lưu ý rằng trường múi giờ không có ý nghĩa đối với các sự kiện cả ngày.

Người tổ chức

Các sự kiện có một trình tổ chức duy nhất là lịch chứa bản sao chính của sự kiện. Các 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ơ đồ dưới đây cho thấy mối quan hệ 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 liên kết với một tài khoản người dùng. Lịch này được tạo tự động cho từng tài khoản người dùng mới và ID của tài khoản thường khớp với địa chỉ email chính của người dùng. Miễn là tài khoản tồn tại, người dùng không bao giờ có thể xoá hoặc "không sở hữu" lịch chính của tài khoản. Tuy nhiên, bạn vẫn có thể chia sẻ tệp này với những 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; bạn có thể sửa đổi, xoá và chia sẻ các lịch này giữa nhiều người dùng.

Lịch và danh sách lịch

Bộ sưu tập Lịch đại diện cho tất cả các lịch hiện có. Bạn có thể dùng tính năng 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à tập hợp tất cả các mục trong lịch mà người dùng đã thêm vào danh sách của mình (hiển thị trong bảng điều khiển bên trái của giao diện người dùng web). Bạn có thể sử dụng ứng dụng này để thêm và xoá lịch hiện có vào/khỏi danh sách của người dùng. Bạn cũng sử dụng đối tượng này để truy xuất và đặt giá trị của các 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ể có màu riêng cho cùng một lịch.

Bảng sau đây so sánh ý nghĩa của các toán tử đối với hai tập hợp:

Hoạt động Lịch CalendarList
insert Tạo 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 lịch hiện có vào danh sách của người dùng.
delete Xoá lịch phụ. Xoá lịch khỏi danh sách của người dùng.
get Truy xuất siêu dữ liệu của lịch như tiêu đề, múi giờ. Truy xuất siêu dữ liệu cùng với dữ liệu 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 của 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 thường, chẳng hạn như cuộc họp hằng tuần, sinh nhật và ngày lễ. Khác với việc có thời gian bắt đầu và kết thúc khác nhau, các sự kiện lặp lại này thường giống hệt nhau.

Các sự kiện được gọi là định kỳ nếu các sự kiện đó lặp lại theo một lịch biểu đã xác định. Sự kiện một lần 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 trong hai phần:

  • Trường bắt đầu và trường 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 độc lập) và

  • Trường lặp lại (xác định cách sự kiện lặp lại theo thời gian).

Trường lặp lại chứa một mảng 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 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ố tín hiệu trong số đó là:

  • FREQ – Tần suất lặp lại sự kiện (chẳng hạn như DAILY hoặc WEEKLY). Bắt buộc.

  • INTERVAL – Kết hợp với FREQ để chỉ định tần suất lặp lại sự kiện. Ví dụ: FREQ=DAILY;INTERVAL=2 có nghĩa là hai ngày một lần.

  • COUNT — Số lần sự kiện này lặp lại.

  • UNTIL – Ngày hoặc giờ cho đến khi sự kiện được lặp lại (bao gồm cả ngày đó).

  • BYDAY — Ngày trong tuần mà sự kiện được lặp lại (SU, MO, TU, v.v.). Các thành phần tương tự khác bao gồm BYMONTH, BYYEARDAYBYHOUR.

Thuộc tính RDATE chỉ định ngày hoặc giờ bổ sung khi sự kiện xảy 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 khác không có trong RRULE.

Thuộc tính EXDATE tương tự như RDATE, nhưng chỉ định ngày hoặc giờ mà sự kiện không xảy ra. Điều này có nghĩa là bạn nên loại trừ những lần xuất hiện đó. Giá trị 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.

EXDATERDATE có thể có múi giờ và phải là ngày (không phải ngày-giờ) cho các sự kiện cả ngày.

Mỗi thuộc tính có thể xuất hiện trong trường lặp lại nhiều lần. Việc lặp lại được định nghĩa là hợp nhất của tất cả quy tắc RRULERDATE, trừ đi những quy tắc bị loại trừ khỏi tất cả quy tắc EXDATE.

Dưới đây là một số ví dụ về sự kiện định kỳ:

  1. Một sự kiện diễn ra từ 6 giờ sáng đến 7 giờ sáng vào thứ Ba và thứ Sáu hằng tuần, bắt đầu từ ngày 15 tháng 9 năm 2015 và dừng lại sau lần diễn ra thứ 5 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"
    ],
    …
    
  2. Một sự kiện cả ngày bắt đầu từ ngày 1 tháng 6 năm 2015 và lặp lại 3 ngày một lần trong suốt tháng, ngoại trừ ngày 10 tháng 6 nhưng bao gồm cả ngày 9 và 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ệ

Một sự kiện định kỳ bao gồm một số phiên bản: sự kiện đó sẽ xuất hiện cụ thể vào các thời điểm khác nhau. Những thực thể này đóng vai trò là sự kiện.

Việc sửa đổ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 thực thể của sự kiện đó) hoặc chỉ ảnh hưởng đến từng thực thể riêng lẻ. Những trường hợp khác với sự kiện định kỳ gốc được gọi là ngoại lệ.

Ví dụ: một trường hợp ngoại lệ có thể có bản tóm tắt khác, thời gian bắt đầu khác hoặc những người tham dự bổ sung chỉ được mời vào phiên bản đó. Bạn cũng có thể huỷ hoàn toàn một phiên bản mà không cần xoá sự kiện định kỳ (việc huỷ phiên bản được phản ánh trong sự kiện status).

Bạn có thể xem ví dụ về cách làm việc với các sự kiện và thực thể đị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 áp dụng giờ chuẩn thống nhất. Trong API Lịch Google, bạn chỉ định múi giờ bằng cách sử dụng giá trị nhận dạng theo 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ả tác động của những chế độ cài đặt này.

Múi giờ lịch

Múi giờ của lịch còn được gọi là múi giờ mặc định do có ý nghĩa đối với kết quả truy vấn. Múi giờ trên lịch ảnh hưởng đến cách các phương thức events.get(), events.list()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()instances() sẽ được trả về theo múi giờ mà bạn chỉ định trong thông số timeZone. Nếu bạn bỏ qua tham số này, thì tất cả các phương thức đều sử dụng múi giờ theo lịch làm mặc định.
Khớp sự kiện cả ngày với truy vấn có giới hạn thời gian
Phương thức list()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 trả về các thực thể nằm trong phạm vi đã chỉ định. Múi giờ theo lịch dùng để tính toán thời gian bắt đầu và kết thúc của các sự kiện cả ngày nhằm xác định xem các sự kiện đó có thuộc thông số kỹ thuật của 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; thông số kỹ thuật 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 sẽ chỉ định cùng một múi giờ:

  • Thêm giá trị chênh lệch múi giờ vào trường dateTime, ví dụ: 2017-01-25T09:00:00-0500.
  • Chỉ định giờ mà không có chênh lệch, ví dụ: 2017-01-25T09:00:00, để trống trường timeZone (giá trị này ngầm sử dụng múi giờ mặc định).
  • Chỉ định giờ mà không có chênh lệch, ví dụ: 2017-01-25T09:00:00, nhưng sử dụng trường timeZone để 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:

  • Hãy chỉ định thời gian theo giờ UTC: 2017-01-25T14:00:00Z hoặc sử dụng giá trị chênh lệch bằng 0 2017-01-25T14:00:00+0000.

Cách trình bày nội bộ thời gian của sự kiện là giống nhau trong mọi trường hợp này, 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ờ cho sự kiện bằng giao diện người dùng của Lịch:

Mảnh ảnh chụp màn hình cho thấy múi giờ của một sự kiện

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ờ duy nhất. Điều này là cần thiết để mở rộng thời gian lặp lại của sự kiện.