iCalendar를 예측할 수 있지만 이상한 이벤트에 사용하기

(RFC 읽는 재미와 실용주의!)

배경.


내 여자 친구는 간호사인데, 이 곳에서 일하는 것은 그녀가 교대로 일하는 것을 의미한다.그녀의 시간표는 한 조의 교대(때로는 일반, 때로는 야근)이고, 그 다음은 한 조의 휴일(일수도 다르다)이다. 전체 시간표 자체는 몇 주마다 한 번씩 반복된다.기본적으로 다음과 같이 상상한다.

다시 한 번 말하다.
비록 이것은 모델이지만 본질적으로 그녀의 스케줄 사본이 없다면 다음 달 어느 무작위 날에 우리가 시간이 있는지 알 수 없다는 것을 의미한다.그래서 나는 언제든지 이런 유형의 조회를 할 수 있는 전자 버전을 원한다는 것이 분명하다.
불행하게도 구글 달력과 유사한 모든 이벤트를 수동으로 하나씩 입력하는 것도 매우 번거롭다. 수십 개의 이벤트를 수동으로 만들어야 하기 때문이다. ('일주일에 한 번씩 반복' 불행하게도 여기서 삭제하지 않았다. P) 이벤트마다 수동으로 '반복', 수동으로 '사용자 정의...', 수동으로 'X주에 한 번',이 모든 것들은 어떤 잘못도 끌어들이지 않았다.네?
다행히도 이곳은 이날을 구했다...iCalendar 규범!

iCalendar의 규격은 무엇입니까?


iCalendar specification(RFC 5545와 마찬가지로 굿올iCal과 혼동하지 말고 현재 애플Calendar 프로그램이라고 부른다)는'달력과 스케줄 정보를 표시하고 교환하는 데이터 형식, 예를 들어 사건, 대기사항, 일기 항목과 바쁘거나 한가한 정보는 특정한 달력 서비스나 협의와 무관하다'는 것이다.
기본적으로, 이것은 컴퓨터 친선 언어로 이벤트를 설명하는 방법에 대한 규칙 목록입니다. 만약 이 규칙을 따른다면, 사용자는 그들이 사용할 수 있는 각종 달력 프로그램에서 이벤트를 일치하게 가져올 수 있습니다.이 사양을 살펴보면 다음과 같은 다양한 캘린더 응용 프로그램에서 볼 수 있는 다양한 기능을 지정하는 방법에 대해 설명합니다.
  • 지정 위치
  • 시간대 지정
  • 이벤트를 일정 빈도로 반복
  • 누군가가 선택할 수 있는지 필요한 참석자인지 주의
  • 누군가의 달력
  • 에 바쁜 시간인지 여가 시간인지 표시됨
  • 사건 발생 몇 분 전에 경보 발송
  • ...아직 많이 남았어, 많이.
    혹시 벨트 한 통 받은 적 있으면ics 파일이 추가되었습니다. 누르면 달력에 이벤트를 추가하라는 메시지가 표시됩니다. 아래 그림과 같습니다. 축하합니다.당신은 정식으로 iCalendar의 경험을 가지고 있습니다!:D

    iCalendar가 엔진 뚜껑 밑에 있는 모습을 이야기해 봅시다.

    iCalendar의 기본 사항


    iCalendar의 경우 '일할 수 있는 가장 간단한 일' 은 텍스트 파일로 되어 있습니다.ics 확장은 다음 속성을 포함합니다.
  • BEGIN:VCALENDAR … END:VCALENDAR: (필수) iCalendar 대상을 하나의 전체적인 시작과 끝으로 표시한다(웹 페이지를 둘러싸는 방식과 유사하다).
  • VERSION: (필수) 필요한 규격의 버전 번호(보통'2.0'입니다. 당신이 슈퍼 복고적이라고 느끼지 않는 한).
  • PRODID: (필수) iCalendar 객체를 만드는 제품의 유일한 식별자입니다.일부 현실 세계의 예는 “-//Google Inc//Google Calendar 70.9054//EN” 구글 달력과 “-//Apple Inc.//Mac OS X 10.14.6//EN” 애플 달력이다.
  • BEGIN:VEVENT … BEGIN:VEVENT: 한 개 이상의 쌍 태그 이벤트 정의의 시작과 끝.
  • UID: (필수) 이벤트의 유일한 식별자입니다.[buncha-random-chars][buncha-random-chars]@[yourdomain.com]는 모두 흔히 볼 수 있는 모델이다.
  • DTSTAMP: (필수) 이벤트가 생성된 날짜/시간(시작 시간과 혼동하지 마십시오. 이것은 다음입니다).
  • DTSTART … DTEND: 이벤트가 시작되고 끝날 때.
  • 다음은 이 모든 것을 한데 연결하는 간단한 예이다.
    BEGIN:VCALENDAR
    VERSION:2.0
    PRODID:-//Example Corp//Example Calendar App 1.0//EN
    BEGIN:VEVENT
    UID:[email protected]
    DTSTAMP:20210310T001345Z
    DTSTART:19991231T235959
    DTEND:20000101T000000
    SUMMARY:Party like it’s 1999!
    END:VEVENT
    END:VCALENDAR
    
    "y2k.ics"로 저장하고 가져오면 1999년 말, 1999년 12월 31일 밤 11:59:59에서 2020년 1월 1일 자정까지 새로운 이벤트가 나타날 것입니다.

    어떻게 날짜/시간을 지정합니까?


    RFC에서는 이 점을 자세히 다루지만 기본 사항은 다음과 같습니다.
  • 날짜일 경우 YYYYMMDD 형식으로 지정합니다.
  • 날짜와 시간인 경우 24시간YYYYMMDDTHHMMSS 형식으로 지정됩니다.UTC 시간(아래 참조)이면 그 끝에도 하나가 있습니다HH.
  • 예: 1999년 12월 31일 오후 11:59:59:

  • 현지 시간과의 날짜: 인원의 위치를 고려하지 않고 이벤트를 동시에 진행하고 싶을 때 사용합니다.
  •     DTSTART:19991231T235959
    

  • UTC 시간 날짜: 활동이 모든 지리적 위치에서 절대 시간에 있고 여름철을 고려하지 않을 때 사용합니다.(참고: Z 항상 이 형식을 사용합니다.)
  •      DTSTART:19991231T235959Z
    

  • 현지 시간과 시간대 참고가 있는 날짜: 둘의 조합;그것은 특정한 시간과 연결되어 있지만 정해진 시간대 내에 있기 때문에 여름철 같은 일을 고려한다.
  •      DTSTART;TZID=America/Vancouver:19991231T235959
    
    위의 예에서 우리는'현지 시간이 있는 날짜'형식을 사용했다. 이렇게 하면 장소와 상관없이 행사는 같은 시간에 열릴 것이다. 왜냐하면'1999년 마지막 분'의 정확한 시간은 전 세계에서 다르기 때문이다.그러나 교대 시간표를 추적하는 데는'현지 시간과 시간대가 참고되는 날짜가 있다'는 것이 더 의미가 있다. 만약 내가 유럽으로 날아와 일을 한다면 시작 시간을 몇 시간 바꾸게 하고 싶지 않기 때문이다.
    아니오, 세 번째 예DTSTAMP 뒤에 있는 번호는 타자 오류가 아닙니다.DTSTART 등'속성 매개 변수'는 사칭이 아닌 분호로 전송된다.(목록과 필드 구분자 참조) 이것도...

    날짜와 시간을 지정하는 세 가지 다른 방식 반복 이벤트


    알겠습니다. 우리는 처음으로 모든 교대 계획을 세울 충분한 정보를 가지고 있지만, X주마다 반복된다는 것을 주의하십시오.우리는 어떻게 처리합니까?
    입력 !이 속성은 정기 이벤트의 규칙이나 중복 모드를 정의합니다.다음은 지원되는 Recurrence Rules (RRULE) 중 몇 개입니다.
  • TZID: 사건 발생 빈도.예를 들어FREQ,WEEKLY,심지어DAILY.
  • SECONDLY: 두 사건 사이에는 몇 개INTERVAL가 있어야 합니까?
  • FREQ: 반복 이벤트 X회.(예를 들어 4주 동안 지속되는 수업이 있다면 매우 유용하다)
  • COUNT: 또는 이 이벤트는 날짜까지 반복됩니다.
  • UNTIL: 어떤 일이 일주일 중 어느 날에만 발생한다고 말할 수 있습니다.
  • RFC 지원options.

    각양각색의 예 이 모든 것을 함께 놓아라


    우리의 목적을 위해 다음과 같은 활동이 필요합니다.
  • 현지 시간과 시간대가 참고된 날짜를 사용합니다. 왜냐하면 저는 자주 여행(코로나 사태가 아닌 시간에) 사건이 정확한 시작/종료 시간에 내가 세계 어디에 있든지 보여주기를 원합니다.
  • BYDAYFREQWEEKLYINTERVAL로 나뉘는데 시간표가 8주에 한 번씩 반복되기 때문이다.
  • UNTIL일자12/31/2021는 달력마다 리셋할 계획이기 때문에 내년에는 달라질 것입니다!(나는 이 과정을 적어 주기를 강력히 바란다.)
  • 그것들을 함께 놓으면 너는 얻을 수 있다.
    BEGIN:VCALENDAR
    VERSION:2.0
    PRODID:-//Webchick Inc//Webchick’s Crappy Bash Script 1.0//EN
    BEGIN:VEVENT
    UID:3231CB09-1E10-4910-BB24-B358629890B7
    DTSTAMP:20210314T090733Z
    SUMMARY:Day Shift
    DTSTART;TZID=America/Vancouver:20210111T080000
    DTEND;TZID=America/Vancouver:20210111T180000
    RRULE:FREQ=WEEKLY;INTERVAL=8;UNTIL=20211231
    END:VEVENT
    
    ... (repeat x many more events) ...
    
    BEGIN:VEVENT
    UID:F20376E5-FA0F-429D-AB1F-3F0155EE10BA
    DTSTAMP:20210314T090734Z
    SUMMARY:Evening Shift
    DTSTART;TZID=America/Vancouver:20210208T173000
    DTEND;TZID=America/Vancouver:20210208T233000
    RRULE:FREQ=WEEKLY;INTERVAL=8;UNTIL=20211231
    END:VEVENT
    
    ... (repeat x many more events) ...
    
    END:VCALENDAR
    
    애플 달력을 가져올 때:

    여기 있다!
    그래서다음에 니가 살 때ics 파일, 텍스트 편집기에서 열어 보십시오. 현재 얼마나 의미가 있는지 보십시오.
    PS: 이 스크립트를 만드는 데 사용되는 bash 스크립트를 보고 싶으면 를 누르면 됩니다.만약 당신이 혼자 가고 싶다면, https://github.com/webchick/shiftycal 당신의 친구입니다!
    (표지 사진: "this handy validator"저자iCal icon replacement 근거bertop 허가)

    좋은 웹페이지 즐겨찾기