☰
QOwnNotes 时间格式完全指南:用自定义日期时间格式在笔记中插入当前时间
2026/10/13 22:27:42 网站建设 项目流程
  • 桌面应用

【免费下载链接】QOwnNotes

QOwnNotes is a plain-text file notepad and todo-list manager with Markdown support and Nextcloud / ownCloud integration.

项目地址:https://gitcode.com/gh_mirrors/qo/QOwnNotes
点击查看免费下载

QOwnNotes 允许你在笔记中随时插入当前时间,并且默认提供了随系统区域自动变化的短日期格式;如果你希望输出自己定制的日期时间文本,可以在编辑器设置中填写一段自定义时间格式字符串。本文完整讲解 QOwnNotes 中所有可用的日期与时间格式表达式、常见组合示例,并结合仓库源码说明这一功能从设置存储到文本插入的完整实现链路,帮助你按需生成21.05.2001 14:13这类任意形态的时间戳。

功能入口与配置位置

在 QOwnNotes 中,插入当前时间对应的界面动作是Insert current time(快捷键Ctrl+T),定义于 src/mainwindow.ui#L1817-L1828,并挂载在“插入”工具栏(_insertingToolbar)中,见 src/mainwindow.cpp#L1649。

自定义格式字符串的配置位置为:

笔记(Note)菜单 > 设置(Settings)> 编辑器(Editor)>Insert current time分组

在该分组中有一个Time format:单行输入框(QLineEdit,控件名为timeFormatLineEdit),占位提示文本为Enter your custom time format, like "dd.MM.yyyy hh:mm",并且带有清空按钮(clearButtonEnabled),UI 定义见 src/widgets/settings/editorsettingswidget.ui#L310-L339。

底层实现原理(源码视角)

理解了配置入口之后,再看该功能在源码中的实际实现,可以更清楚地知道格式字符串会被如何处理:

  1. 设置读写:格式字符串以insertTimeFormat为键保存在 QSettings 中。编辑器设置页加载时读取该键填入输入框(src/widgets/settings/editorsettingswidget.cpp#L99),点击 OK 保存时写回(src/widgets/settings/editorsettingswidget.cpp#L154)。

  2. 插入动作:触发“插入当前时间”动作时,MainWindow::on_actionInsert_current_time_triggered()(src/mainwindow.cpp#L5220-L5237)执行以下步骤:

    • 获取当前活动笔记的文本编辑器与光标位置;
    • 调用QDateTime::currentDateTime()取得当前时刻;
    • 读取insertTimeFormat设置;
    • 若格式为空,则回退为系统区域设置的短日期格式:locale.toString(dateTime.date(), QLocale::FormatType::ShortFormat);
    • 若格式非空,则使用locale.toString(dateTime, format)按自定义格式格式化;
    • 最后c.insertText(text)把结果插入光标处。

由此可见,格式字符串遵循 Qt 的QDateTime::toString()/QLocale::toString()语法(各表达式的具体含义见下文两节表格),并且最终渲染时会使用系统区域设置(QLocale::system())——这正是ddd、MMMM等表达式会输出本地化星期名、月份名的原因。

日期格式表达式

下表为所有可用于日期部分的格式表达式(与 QOwnNotes 官方文档一致):

表达式输出结果
d不带前导零的日(1–31)
dd带前导零的日(01–31)
ddd本地化的星期缩写名(例如pon.–niedz.)
dddd本地化的完整星期名(例如poniedziałek–niedziela)
M不带前导零的月份(1–12)
MM带前导零的月份(01–12)
MMM本地化的月份缩写名(例如sty.–gru.)
MMMM本地化的完整月份名(例如styczeń–grudzień)
yy两位数字年份(00–99)
yyyy四位数字年份

注意M与m含义不同:M系列用于月份,m系列用于分钟;格式表达式区分大小写,写错大小写会得到完全不同的输出。

时间格式表达式

下表为所有可用于时间部分的格式表达式:

表达式输出结果
h不带前导零的小时(24 小时制为 0–23;12 小时制下为 1–12)
hh带前导零的小时(24 小时制为 00–23;12 小时制下为 01–12)
H不带前导零的小时(0–23,始终为 24 小时制)
HH带前导零的小时(00–23,始终为 24 小时制)
m不带前导零的分钟(0–59)
mm带前导零的分钟(00–59)
s不带前导零的秒(0–59)
ss带前导零的秒(00–59)
z不带前导零的毫秒(0–999)
zzz带前导零的毫秒(000–999)
AP或A12 小时制下的 AM/PM 指示;A/AP会被替换为AM或PM
ap或a12 小时制下的 am/pm 指示;a/ap会被替换为am或pm
t时区缩写(例如CEST)

使用建议:

  • 需要 24 小时制时优先使用H/HH,避免 12 小时制带来的 1–12 与 0–23 歧义;
  • 毫秒通常与ss/zzz搭配用于时间戳型记录,普通笔记场景很少用到;
  • AP/ap需与 12 小时制的小时表达式(h/hh)配合才有意义。

官方示例格式串

QOwnNotes 官方文档给出的可直接套用的示例组合如下:

格式结果
dd.MM.yyyy hh:mm21.05.2001 14:13
dd.MM.yyyy21.05.2001
ddd MMMM d yywt. maj 21 01
hh:mm:ss.zzz14:13:09.042
h:m:s ap2:13:9 pm

以上示例中,ddd MMMM d yy输出wt. maj 21 01即星期缩写、完整月份名、日与两位年份的混合,展示了本地化名称如何融入格式串;hh:mm:ss.zzz常用于需要毫秒级精度的时间戳。

基于上述表达式表,还可以自行组合出更多实用格式,例如:

  • yyyy-MM-dd HH:mm:ss→ ISO 风格时间戳(如2001-05-21 14:13:09);
  • dddd, dd MMMM yyyy→ 完整本地化长日期(如poniedziałek, 21 maj 2001);
  • yyyyMMdd-HHmmss→ 适合写入文件名的紧凑时间戳。

关于更多复杂输出需求

如果需要在插入当前时间时进行更复杂的处理(例如插入相对日期、自动计算某个偏移、按笔记类型切换格式),内置的固定格式字符串无法满足,QOwnNotes 官方文档建议改用自定义动作(custom action):通过脚本调用registerCustomAction()注册一个菜单项,并在回调中按需拼接任意文本再插入笔记。

  • 脚本接口说明见 webpage/src/pl/scripting/methods-and-objects.md 中的 “Rejestrowanie akcji niestandardowej” 一节;
  • 底层 C++ 实现见 src/services/scriptingservice.cpp#L1833-L1857,其签名支持菜单文本、按钮文本、图标以及是否出现在笔记编辑区右键菜单等参数。

小结

QOwnNotes 的“插入当前时间”是一个小而实用的功能:insertTimeFormat设置项 +QLocale::toString()的实现方式让它既能输出任意形态的日期时间文本,又能自动贴合系统区域的语言习惯。掌握上文的日期、时间表达式表与组合示例,你便可以在编辑器设置中一行配置,随时向笔记写入符合自己习惯的时间戳。

如需查阅更多细节,可继续阅读仓库内该文档的其他语言版本(如 webpage/src/de/editor/time-formats.md、webpage/src/fr/editor/time-formats.md、webpage/src/zh_CN 对应目录 下的 editor 子目录),以及 Qt 官方对QDateTime::toString()格式语法的完整说明。

  • 桌面应用

【免费下载链接】QOwnNotes

QOwnNotes is a plain-text file notepad and todo-list manager with Markdown support and Nextcloud / ownCloud integration.

项目地址:https://gitcode.com/gh_mirrors/qo/QOwnNotes
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询