Skip to content

日历同步

将 Obsidian 与日历应用集成,可以实现日程管理、会议记录和时间追踪。本文介绍与 Google Calendar 和 Apple Calendar 的同步方案。

为什么集成日历?

  • 📅 日程可视化:在 Obsidian 中查看日程安排
  • 📝 会议记录:自动创建会议笔记模板
  • ⏱️ 时间追踪:记录活动时间
  • 🔗 双向链接:笔记与日程相互关联

方案对比

方案平台双向同步难度
Calendar 插件全平台
Full Calendar 插件全平台⚠️⭐⭐
ICS 插件全平台
iOS 快捷指令iOS/macOS⭐⭐
Templater + API全平台⭐⭐⭐

方案一:Calendar 插件

这是最简单的方案,适合查看和管理日记。

安装

  1. 设置 → 核心插件 → 启用 "日记"
  2. 设置 → 第三方插件 → 搜索 "Calendar" → 安装

功能

  • 侧边栏日历视图
  • 快速创建日记
  • 显示日记完成状态
  • 周视图和月视图

配置

在插件设置中:

yaml
# 日记文件夹
folder: daily

# 日期格式
dateFormat: YYYY-MM-DD

# 周起始日
startWeekOn: Monday

方案二:Full Calendar 插件

功能更强大的日历插件,支持从日历文件读取事件。

安装

  1. 安装 "Full Calendar" 插件
  2. 在设置中配置日历源

支持的日历源

  1. 本地 ICS 文件

    yaml
    type: local
    path: calendars/work.ics
  2. 远程 ICS 链接

    yaml
    type: remote
    url: https://calendar.google.com/xxx/basic.ics
  3. Obsidian 笔记中的事件

    yaml
    type: fullNote

在笔记中创建事件

markdown
---
type: event
date: 2024-02-15
startTime: 14:00
endTime: 15:30
title: 项目会议
location: 会议室A
---

## 会议议程
- 讨论项目进度
- 分配任务

方案三:Google Calendar 集成

方法一:使用 ICS 链接(只读)

  1. 在 Google Calendar 中获取 ICS 链接

    • 设置 → 设置 → 选择日历 → 获取日历地址
    • 复制 ICAL 格式链接
  2. 在 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 tell

iOS 快捷指令

创建快捷指令将日程发送到 Obsidian:

  1. 获取日历事件
  2. 格式化为 Markdown
  3. 使用 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.md

2. 结合周期性笔记

使用 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 配置步骤:

  1. 打开 QuickAdd 设置
  2. 添加新的 Choice:「会议笔记」
  3. 类型选择 Template
  4. 配置模板路径和文件名格式

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 导出

  1. 在 Outlook Web 中获取日历 ICS 链接
  2. 设置 → 日历 → 共享 → 发布日历
  3. 复制 ICS 链接
  4. 在 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);
}

相关资源