日历同步
将 Obsidian 与日历应用集成,可以实现日程管理、会议记录和时间追踪。本文介绍与 Google Calendar 和 Apple Calendar 的同步方案。
为什么集成日历?
- 📅 日程可视化:在 Obsidian 中查看日程安排
- 📝 会议记录:自动创建会议笔记模板
- ⏱️ 时间追踪:记录活动时间
- 🔗 双向链接:笔记与日程相互关联
方案对比
| 方案 | 平台 | 双向同步 | 难度 |
|---|---|---|---|
| Calendar 插件 | 全平台 | ❌ | ⭐ |
| Full Calendar 插件 | 全平台 | ⚠️ | ⭐⭐ |
| ICS 插件 | 全平台 | ❌ | ⭐ |
| iOS 快捷指令 | iOS/macOS | ✅ | ⭐⭐ |
| Templater + API | 全平台 | ✅ | ⭐⭐⭐ |
方案一:Calendar 插件
这是最简单的方案,适合查看和管理日记。
安装
- 设置 → 核心插件 → 启用 "日记"
- 设置 → 第三方插件 → 搜索 "Calendar" → 安装
功能
- 侧边栏日历视图
- 快速创建日记
- 显示日记完成状态
- 周视图和月视图
配置
在插件设置中:
yaml
# 日记文件夹
folder: daily
# 日期格式
dateFormat: YYYY-MM-DD
# 周起始日
startWeekOn: Monday方案二:Full Calendar 插件
功能更强大的日历插件,支持从日历文件读取事件。
安装
- 安装 "Full Calendar" 插件
- 在设置中配置日历源
支持的日历源
本地 ICS 文件
yamltype: local path: calendars/work.ics远程 ICS 链接
yamltype: remote url: https://calendar.google.com/xxx/basic.icsObsidian 笔记中的事件
yamltype: fullNote
在笔记中创建事件
markdown
---
type: event
date: 2024-02-15
startTime: 14:00
endTime: 15:30
title: 项目会议
location: 会议室A
---
## 会议议程
- 讨论项目进度
- 分配任务方案三:Google Calendar 集成
方法一:使用 ICS 链接(只读)
在 Google Calendar 中获取 ICS 链接
- 设置 → 设置 → 选择日历 → 获取日历地址
- 复制 ICAL 格式链接
在 Full Calendar 中添加远程源
方法二:使用 Templater 自动化
创建一个 Templater 脚本获取日历事件:
javascript
<%*
// 使用 Google Calendar API 获取事件
// 需要配置 OAuth 认证
const events = await fetchGoogleEvents();
for (const event of events) {
tR += `- ${event.start} - ${event.title}\n`;
}
%>注意
Google Calendar API 需要在 Google Cloud Console 中配置项目和凭据。
方案四:Apple Calendar 集成
macOS 自动化
使用 AppleScript 创建日程到 Obsidian:
applescript
tell application "Calendar"
set theEvent to first event of calendar "Work"
set eventTitle to name of theEvent
set eventStart to start date of theEvent
end tell
tell application "Obsidian"
-- 创建笔记
end telliOS 快捷指令
创建快捷指令将日程发送到 Obsidian:
- 获取日历事件
- 格式化为 Markdown
- 使用 Obsidian URI 创建笔记
text
obsidian://new?vault=MyVault&file=Meeting%20Notes/{{date}}&content={{formatted_content}}日程笔记模板
会议笔记模板
markdown
---
date: {{date}}
time: {{time}}
attendees:
tags: [meeting]
---
# {{title}}
## 参会人员
-
## 议程
1.
2.
## 讨论内容
## 行动项
- [ ]
## 下次会议
- 时间:
- 议题:日计划模板
markdown
---
date: {{date}}
type: daily
---
# {{date:YYYY-MM-DD}} 日计划
## 今日日程
```fullcalendar
type: remote
url: YOUR_CALENDAR_ICS_URL
```markdown
## 今日目标
- [ ]
- [ ]
- [ ]
## 笔记
## 明日计划最佳实践
1. 统一日程文件夹结构
text
Vault/
├── Calendar/
│ ├── Daily/
│ ├── Meetings/
│ └── Events/
└── Templates/
├── meeting.md
└── daily.md2. 结合周期性笔记
使用 Periodic Notes 插件管理周计划和月计划。
3. 自动化工作流
使用 QuickAdd 创建快捷操作:
- 快速创建会议笔记
- 自动从日历获取参会人员
- 会后添加行动项到任务列表
版本要求
版本说明
- Calendar 插件:需要 Obsidian 0.9.0+
- Full Calendar 插件:需要 Obsidian 0.13.0+
- URI 协议:需要 Obsidian 0.10.0+
高级日历集成
时间追踪方案
结合日历和 Dataview 实现时间追踪:
时间记录模板:
markdown
---
type: time-entry
project: {{project}}
start: {{time}}
end:
tags: [time-tracking]
---
# {{project}} - {{date:YYYY-MM-DD}} {{time:HH:mm}}
## 工作内容
-
## 备注时间追踪统计(DataviewJS):
dataviewjs
// 本周时间追踪统计
const pages = dv.pages('"Calendar/TimeTracking"')
.where(p => p.file.ctime >= dv.date("today") - dur("7 days"));
const projectHours = {};
for (let page of pages) {
const project = page.project || "未分类";
projectHours[project] = (projectHours[project] || 0) + 1;
}
dv.header(3, "⏱️ 本周时间分布");
dv.table(
["项目", "记录条数", "预估时间"],
Object.entries(projectHours)
.sort((a, b) => b[1] - a[1])
.map(([project, count]) => [project, count, `${count * 0.5}h`])
);自动化日程笔记
使用 Templater + QuickAdd 实现会议笔记自动创建:
QuickAdd 配置步骤:
- 打开 QuickAdd 设置
- 添加新的 Choice:「会议笔记」
- 类型选择 Template
- 配置模板路径和文件名格式
Templater 会议笔记模板:
javascript
<%*
// 从 Full Calendar 获取今日日程
const today = tp.date.now("YYYY-MM-DD");
const fileName = `${today} 会议记录`;
// 获取用户输入
const meetingTitle = await tp.system.prompt("会议主题");
const attendees = await tp.system.prompt("参会人员(逗号分隔)");
tR += `---
date: ${today}
type: meeting
title: ${meetingTitle}
attendees: [${attendees.split(',').map(a => `"${a.trim()}"`).join(', ')}]
tags: [meeting]
---
# ${meetingTitle}
## 参会人员
${attendees.split(',').map(a => `- ${a.trim()}`).join('\n')}
## 议程
1.
## 讨论内容
## 行动项
- [ ]
## 下次会议
- 时间:
- 议题:
`;
%>Outlook 日历集成
企业环境中常用的 Outlook 日历集成方案:
方法一:ICS 导出
- 在 Outlook Web 中获取日历 ICS 链接
- 设置 → 日历 → 共享 → 发布日历
- 复制 ICS 链接
- 在 Full Calendar 中添加为远程源
方法二:通过 Power Automate 同步
text
触发器:Outlook - 即将开始的日历事件(提前15分钟)
↓
动作:HTTP 请求 → Obsidian URI
↓
创建会议笔记模板方法三:使用 Graph API(开发者)
javascript
<%*
// 通过 Microsoft Graph API 获取日程
// 需要先配置 OAuth 认证
const response = await fetch(
'https://graph.microsoft.com/v1.0/me/calendarView?' +
new URLSearchParams({
startDateTime: tp.date.now("YYYY-MM-DDTHH:mm:ss"),
endDateTime: tp.date.now("YYYY-MM-DDTHH:mm:ss", 7)
}),
{
headers: { 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' }
}
);
const events = await response.json();
for (const event of events.value) {
tR += `- ${event.start.dateTime} - ${event.subject}\n`;
}
%>日历视图美化
使用 CSS 片段美化 Full Calendar 插件外观:
css
/* Full Calendar 主题美化 */
.fc {
--fc-border-color: var(--background-modifier-border);
--fc-today-bg-color: rgba(124, 58, 237, 0.08);
--fc-event-bg-color: var(--interactive-accent);
--fc-event-border-color: var(--interactive-accent);
}
/* 事件圆角 */
.fc-event {
border-radius: 4px;
padding: 1px 4px;
}
/* 今日高亮 */
.fc-day-today {
background-color: rgba(124, 58, 237, 0.05) !important;
}
/* 周末背景 */
.fc-day-sat, .fc-day-sun {
background-color: rgba(0, 0, 0, 0.02);
}