前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >日历标准格式

日历标准格式

原创
作者头像
lqmeta
发布于 2020-07-05 18:44:31
发布于 2020-07-05 18:44:31
9.5K0
举报
文章被收录于专栏:得一得一

概述

通用的日历格式是 iCalendar,通常扩展名是.ics

iCalendar允许用户通过电子邮件的方式发送“会议请求”或“任务”。收信人使用支持iCalendar邮件客户端,便可以很方便地回应发件人,接受请求或另外提议一个新的会议时间。

维基百科中关于 iCalendar 的描述是: https://zh.wikipedia.org/wiki/ICalendar

标准

具体参考的标准是 RFC 5545

一般 ics 文件的格式

代码语言:txt
AI代码解释
复制
BEGIN:VCALENDAR                                  # 日历开始
PRODID:-//test.us//iCalendar Event//EN           # 软件信息
VERSION:2.0                                      # 遵循的 iCalendar 版本号
CALSCALE:GREGORIAN                               # 历法:公历
METHOD:PUBLISH                                   # 方法:公开 也可以是 REQUEST 等用于日历间的信息沟通方法
CLASS:PUBLIC                                     # Classification 此属性定义日历组件的访问分类: "PUBLIC" / "PRIVATE" / "CONFIDENTIAL" / iana-token / x-name
BEGIN:VTIMEZONE                                  # Time Zone Component
TZID:Asia/Shanghai                               # Time Zone Identifier 时区标识符
TZURL:http://tzurl.org/zoneinfo-outlook/Asia/Shanghai            # Time Zone URL: 访问 http://tzurl.azureedge.net/zoneinfo-outlook/Asia
X-LIC-LOCATION:Asia/Shanghai
BEGIN:STANDARD
TZOFFSETFROM:+0800
TZOFFSETTO:+0800
TZNAME:CST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE                                     # 时区组件结束
BEGIN:VEVENT                                      # 事件开始
DTSTAMP:20190723T071307Z                          # 有 Method 属性时表示 实例创建时间,没有时表示最后修订的日期时间
DTSTART;TZID=Asia/Shanghai:20191024T150000        # 开始的日期时间
DTEND;TZID=Asia/Shanghai:20191024T160000          # 结束的日期时间
SUMMARY:我的会议                                   # 简介 一般是标题
# UID (唯一标识符)
UID:20190723T071307Z-105904298@fe80:0:0:0:e4:cbff:fe80:b24c%ens5                  
# Time Zone Identifier 时区标识符
TZID:Asia/Shanghai                                                                
# 描述
DESCRIPTION:issac 的描述  
# 地址                                              
LOCATION:https://cloud.tencent.com/developer/user/6258660      
# Alarm Component 报警组件                                
BEGIN:VALARM    
# 触发 alarm (开始之前10分钟提醒)                                                                  
TRIGGER:-PT10M  
# AUDIO\DISPLAY\EMAIL                                                                  
ACTION:DISPLAY     
# In a DISPLAY alarm, the intended alarm effect is for 
# the text value of the "DESCRIPTION" property to be displayed to the user. 
DESCRIPTION:Reminder  
# alarm 结束                                 
END:VALARM   
# 事件结束                                                                     
END:VEVENT    
# 日历结束                                                                    
END:VCALENDAR

设置日历周期性重复

代码语言:txt
AI代码解释
复制
# 重复规则 rrule (Recurrence Rule):
RRULE:FREQ=WEEKLY;WKST=SU;UNTIL=20190917T133000;INTERVAL=1;BYDAY=TU

重复规则 rrule (Recurrence Rule)

重复规则包含多个属性, 每个属性以 NAME = VALUE 对的形式存在, 属性与属性之间用分号区分, 属性之间没有特定的顺序要求,在同一个重复规则中每个属性最多只能出现一次。

1、FREQ

FREQ 属性表示重复规则的类型,可选的 VALUE 有:

  • SECONDLY, 表示以秒为间隔单位进行重复。
  • MINUTELY, 表示以分钟为间隔单位进行重复。
  • HOURLY, 表示以小时为间隔单位进行重复。
  • DAILY, 表示以天为间隔单位进行重复。
  • WEEKLY, 表示以周为间隔单位进行重复。
  • MONTHLY, 表示以月为间隔单位进行重复。
  • YEARLY, 表示以年为间隔单位进行重复。

2、WKST

WKST 取值范围 MO(周一), TU(周二), WE(周三), TU(周四), FR(周五), SA(周六), SU(周日)。 默认值为 MO。

当一个 WEEKLY 类型的重复规则, INTERVAL 大于 1, 且带有 BYDAY 属性时, 则必须带有 WKST 属性。 当一个 YEARLY 类型的重复规则带有 BYWEEKNO 属性时, 也必须带有 WKST 属性。

3、UNTIL

UNTIL 属性定义了一个日期-时间值,用以限制重复规则。

这个日期-时间值表示这个重复规则的最后一次事件的发生时间。

如果重复规则中未包含 UNTIL 和 COUNT 属性, 则表示该重复规则无限重复。

4、INTERVAL

INTERVAL 属性表示重复规则的间隔, 必须为正整数。 默认值为1。

对应上述不同的 FREQ 值分别表示每一秒,每一分钟, 每一小时, 每一天, 每一周, 每一月, 每一年。s

5、BYDAY

BYDAY 取值范围: MO(周一), TU(周二), WE(周三), TU(周四), FR(周五), SA(周六), SU(周日)。可以有多个值,用逗号分隔。

每个值可以在前面加上一个正整数(+n)或者负整数(-n),用以在 MONTHLY 或者 YEARLY 的重复类型中表示第 n 个周几。 例如,在一个 MONTHLY 类型的重复规则中, +1MO(或者1MO)表示这个月的第1个周一,如果是 -1MO 则表示这个月的最后1个周一。

如果前面没有数字,则表示在这个重复类型中的所有的周几, 比如在一个 MONTHLY 的重复类型中, MO 表示这个月里所有的周一。

与 Google 日历同步

调用 Google Calendar API 的 demo

代码语言:txt
AI代码解释
复制
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import BaseHTTPServer
import httplib2
import urlparse

from apiclient.discovery import build
from oauth2client.client import OAuth2WebServerFlow

class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    """Child class of BaseHTTPRequestHandler that only handles GET request."""
    # https://developers.google.com/calendar/quickstart/js
    clientID = '295995113385-nu8em9928itnt7fa92dc5ab1tv710ojs.apps.googleusercontent.com'
    apiKey = 'YFzGsExw6fURfmysfxr1lvpF'
    authUrl = 'https://www.googleapis.com/auth/calendar'
    flow = OAuth2WebServerFlow(clientID, apiKey, authUrl, redirect_uri='http://localhost:8080/')

    def do_GET(self):
        """Handler for GET request."""
        print '\n\nNEW REQUEST, Path: %s' % (self.path)

        if self.path.startswith('/?fake_user='):
            self.handle_initial_url()
        # When you redirect to the authorization server below, it redirects back
        # to to http://localhost:8080/?code=<some_code> after the user grants access
        # permission for your application.
        elif self.path.startswith('/?code='):
            self.handle_redirected_url()
        else:
            self.respond_ignore() # Either an error from auth server or bad user entered URL.

    def handle_initial_url(self):
        """Handles the initial path."""
        parsed = urlparse.urlparse(self.path)
        fake_user = urlparse.parse_qs(parsed.query)['fake_user'][0]
        self.respond_redirect_to_auth_server(fake_user)

    def respond_redirect_to_auth_server(self, fake_user):
        """Respond to the current request by redirecting to the auth server."""
        uri = RequestHandler.flow.step1_get_authorize_url()
        print 'Redirecting %s to %s' % (fake_user, uri)

        self.send_response(301)
        self.send_header('Cache-Control', 'no-cache')
        self.send_header('Location', uri)
        self.end_headers()

    def handle_redirected_url(self):
        """Handles the redirection back from the authorization server."""
        # The server should have responded with a "code" URL query parameter. This is needed to acquire credentials.
        parsed = urlparse.urlparse(self.path)
        code = urlparse.parse_qs(parsed.query)['code'][0]
        credentials = RequestHandler.flow.step2_exchange(code)
        http = httplib2.Http()
        http = credentials.authorize(http)
        service = build('calendar', 'v3', http=http)

        event = {
            # 'summary': 'Google I/O 2015',
            'summary': 'tttttt',
            'location': '800 Howard St., San Francisco, CA 94103',
            'description': 'A chance to hear more about Google\'s developer products.',
            'start': {
                'dateTime': '2019-08-18T09:00:00-07:00',
                'timeZone': 'America/Los_Angeles',
            },
            'end': {
                'dateTime': '2019-08-18T17:00:00-07:00',
                'timeZone': 'America/Los_Angeles',
            },
            'recurrence': [
                # 'RRULE:FREQ=DAILY;COUNT=2'
                # 'RRULE:FREQ=WEEKLY' # 每周重复
                # 'RRULE:FREQ=WEEKLY;WKST=SU;UNTIL=20200121T133000;INTERVAL=4;BYDAY=TU' # 报错了
            ],
            'attendees': [
                {'email': 'lpage@example.com'},
                {'email': 'sbrin@example.com'},
            ],
            'reminders': {
                'useDefault': False,
                'overrides': [
                    # {'method': 'email', 'minutes': 24 * 60},
                    {'method': 'popup', 'minutes': 15},
                ],
            },
        }

        res = service.events().insert(calendarId='primary', body=event).execute()
        parsed = urlparse.urlparse(res.get('htmlLink'))
        eidCode = urlparse.parse_qs(parsed.query)['eid'][0]
        eventeditUrl = 'https://calendar.google.com/calendar/r/eventedit/' + eidCode
        print '>>> eventeditUrl: %s' % (eventeditUrl)
        self.send_response(301)
        self.send_header('Cache-Control', 'no-cache')
        self.send_header('Location', eventeditUrl)
        self.end_headers()

    def respond_ignore(self):
        """Responds to the current request that has an unknown path."""
        self.send_response(200)
        self.send_header('Content-type', 'text/plain')
        self.send_header('Cache-Control', 'no-cache')
        self.end_headers()
        self.wfile.write(
            'This path is invalid or user denied access:\n%s\n\n' % self.path)
        self.wfile.write(
            'User entered URL should look like: http://localhost:8080/?fake_user=johndoe')

def main():
    try:
        server = BaseHTTPServer.HTTPServer(('', 8080), RequestHandler)
        print 'Starting server. Use Control+C to stop.'
        server.serve_forever()
    except KeyboardInterrupt:
        print 'Shutting down server.'
        server.socket.close()


if __name__ == '__main__':
    main()

Google Calendar API 参考资料

与 outlook 日历同步

the Outlook REST API

Use the Outlook REST API

Outlook calendar API

Outlook calendar API

Outlook 加载项

add-ins 加载项

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
ubuntu 20.04 安装中文输入法_如何在ubuntu中安装中文输入法
在Ubuntu系统中,无论是写文档还是在程序中写注释,都经常需要用到中文输入法。本文简单介绍了三种输入法框架,然后详细介绍了在Ubuntu 20.04系统中,IBus框架和Fcitx框架支持的中文输入法的配置和安装。
全栈程序员站长
2022/11/09
27K0
ubuntu 20.04 安装中文输入法_如何在ubuntu中安装中文输入法
ubuntu下安装中文输入法_ubuntu下载中文输入法
Ubuntu中安装中文输入法相比Windows上要复杂不少(其实也不算复杂,就是步骤上要稍微多一些)。这篇文章将基于 Ubuntu Desktop 20.04 进行中文输入法安装说明。
全栈程序员站长
2022/11/09
2.8K0
ubuntu下安装中文输入法_ubuntu下载中文输入法
ubuntu 20.04 安装中文输入法_ubuntu20.04安装中文输入法
在安装ubuntu时,如果选择英文安装默认会不启用中文输入法的。可以通过下述方法开启:
全栈程序员站长
2022/11/09
1.8K0
ubuntu 20.04 安装中文输入法_ubuntu20.04安装中文输入法
ubuntu16 中文输入法_如何在ubuntu中安装中文输入法
最近刚给笔记本装了Ubuntu+win10双系统,但是ubuntu16.04没有自带中文输入法,所以经过网上的一些经验搜索整合,分享一下安装中文输入法的心得。本文主要介绍了谷歌拼音跟ibus中文输入法的安装,由于ibus输入法问题较多,所以目前我用的是谷歌输入法。
全栈程序员站长
2022/11/09
2.2K0
ubuntu16 中文输入法_如何在ubuntu中安装中文输入法
ubuntu设置中文输入法_ubuntu如何使用中文输入法
重启Ubuntu 6. 在输入源中点击+号,选中里面的汉语,再选中里面的汉语(Intelligent Pinyin),添加即可,并将其移动到第一位。在输入源中点击+号,选中里面的汉语,再选中里面的汉语(Intelligent Pinyin),添加即可,并将其移动到第一位。
全栈程序员站长
2022/11/10
2.6K0
ubuntu设置中文输入法_ubuntu如何使用中文输入法
Ubuntu20.04安装中文输入法
  新装了ubuntu20.04的系统,由于装系统时,选择安装了英文的版本,因此系统没有中文输入法,此时我想加入中文输入法。
全栈程序员站长
2022/11/09
1.5K0
Ubuntu20.04安装中文输入法
Ubuntu20.04中文输入法配置
但Ubuntu初始安装后是没有智能拼音输入法的,需要切换以下系统的语言,才能出现智能拼音输入法。
用户9402963
2022/01/20
8.1K0
教你在Kali linux 上安装中文输入法
之前很多人说,我安装了kali之后,安装输入法是英文的,变不过来。今天就告诉大家如何在kali linux上安装中文输入法,再也不用考虑如何切换中文了。
学神IT
2019/11/11
8.1K0
centos7安装后怎么调出中文输入法
首先查看系统上是否安装输入法,在终端输入yum install ibus-libpinyin.
生信real
2020/08/26
4.6K0
centos7安装后怎么调出中文输入法
ubuntu安装中文输入法搜狗_中文输入法怎么调出来
首先,要安装中文输入法,必须要保证系统上有 fcitx。fcitx是一个以 GPL 方式发布的输入法框架,安装 fcitx 后可以为操作系统的桌面环境提供一个灵活的输入方案,解决在 GNU/Linux 环境下安装中文输入法的问题。
全栈程序员站长
2022/11/10
3K0
ubuntu安装中文输入法搜狗_中文输入法怎么调出来
Linux 下安装rime输入法平台(Debian+GNOME)
Linux 系统版本: Debian GNU/Linux 11 (bullseye)
易弦
2022/10/09
5.7K0
解决ubuntu16.04中codeblocks中文显示不全的问题[通俗易懂]
安装ubuntu16.04时,默认只安装了英文语言包。 若未安装,按照以下步骤安装:
全栈程序员站长
2022/09/17
2.2K0
解决ubuntu16.04中codeblocks中文显示不全的问题[通俗易懂]
ubuntu16安装中文输入法「建议收藏」
参考自 :https://jingyan.baidu.com/article/bad08e1ef4b2f109c85121b7.html
全栈程序员站长
2022/11/09
1.9K0
ubuntu16安装中文输入法「建议收藏」
Linux中文输入法-搜狗输入法安装方法
我们从/etc/os-release文件中获取openSUSE系统的版本号,直接执行下面命令添加M17N源:
字母哥博客
2020/09/23
8.7K0
ubuntu16安装中文输入法_ubuntu输入法安装
本文安装谷歌输入法。使用一段时间后发现,谷歌输入法用起来极舒服,比sougou for linux好用多了。记得谷歌的中文输入法主要是北京分部在做,对google cn的好感度飙升!!!
全栈程序员站长
2022/11/09
1.6K0
ubuntu16安装中文输入法_ubuntu输入法安装
Ubuntu16.04安装中文输入法_Ubuntu触摸板驱动
然后打开设置,选择 language,点击添加
全栈程序员站长
2022/11/10
1.1K0
Ubuntu16.04安装中文输入法_Ubuntu触摸板驱动
Linux学习总结(九)—— CentOS常用软件安装:中文输入法、Chrome
中文输入法 切换到root用户,运行以下命令: yum install "@Chinese Support" 按照提示,一路Yes等待安装完成。安装完成后点击左上角System -> Preferen
陈树义
2018/04/13
3K0
Linux学习总结(九)—— CentOS常用软件安装:中文输入法、Chrome
Ubuntu20.04安装输入法_ubuntu20中文输入法
本文安装谷歌输入法。 其实之前一直用的是搜狗输入法,因为20.04取消qt4了没装成,就去尝试别的输入法了。发现谷歌输入法用起来极舒服,比sougou for linux好用多了。记得谷歌的中文输入法主要是北京分部在做,对google cn的好感度飙升!!!
全栈程序员站长
2022/11/09
2K0
Ubuntu20.04安装输入法_ubuntu20中文输入法
Ubuntu 20.04中文输入法支持
如果选用英文环境安装Ubuntu20.04,默认不会有拼音输入,如果不安装第三方输入法,使用内部中文输入法,方法如下:
zhangrelay
2020/05/04
40.2K0
Ubuntu16.04安装搜狗拼音输入法(中文输入法)「建议收藏」
打开官网http://pinyin.sogou.com/linux,点击自己对应的系统位数安装包,然后下载。
全栈程序员站长
2022/09/20
1.6K0
Ubuntu16.04安装搜狗拼音输入法(中文输入法)「建议收藏」
推荐阅读
相关推荐
ubuntu 20.04 安装中文输入法_如何在ubuntu中安装中文输入法
更多 >
LV.2
这个人很懒,什么都没有留下~
目录
  • 概述
  • 标准
  • 一般 ics 文件的格式
    • 设置日历周期性重复
      • 重复规则 rrule (Recurrence Rule)
  • 与 Google 日历同步
    • 调用 Google Calendar API 的 demo
    • Google Calendar API 参考资料
  • 与 outlook 日历同步
    • the Outlook REST API
    • Outlook calendar API
    • Outlook 加载项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档