feat: 新增 account 和 plan 目录
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
73
account/admin/skills/datetime-tool/SKILL.md
Normal file
73
account/admin/skills/datetime-tool/SKILL.md
Normal file
@@ -0,0 +1,73 @@
|
||||
---
|
||||
name: openakita/skills@datetime-tool
|
||||
description: |
|
||||
获取当前时间、格式化日期、计算日期差值、时区转换。
|
||||
当用户询问时间、日期、时区相关问题时使用此技能。
|
||||
关键词: 时间, 日期, 时区, 今天, 现在, 星期, 几点
|
||||
license: MIT
|
||||
metadata:
|
||||
author: myagent
|
||||
version: "1.0.0"
|
||||
---
|
||||
|
||||
# DateTime Tool
|
||||
|
||||
处理时间和日期相关的操作。
|
||||
|
||||
## When to Use
|
||||
|
||||
- 用户询问当前时间或日期
|
||||
- 需要格式化日期输出
|
||||
- 计算两个日期之间的差值
|
||||
- 时区转换
|
||||
- 获取星期几、月份名称等
|
||||
|
||||
## Instructions
|
||||
|
||||
### 获取当前时间
|
||||
|
||||
运行脚本获取当前时间:
|
||||
|
||||
```bash
|
||||
python scripts/get_time.py
|
||||
```
|
||||
|
||||
支持的参数:
|
||||
- `--timezone <tz>`: 指定时区 (如 Asia/Shanghai, UTC)
|
||||
- `--format <fmt>`: 日期格式 (如 %Y-%m-%d %H:%M:%S)
|
||||
|
||||
### 计算日期差值
|
||||
|
||||
```bash
|
||||
python scripts/get_time.py --diff "2024-01-01" "2024-12-31"
|
||||
```
|
||||
|
||||
### 时区转换
|
||||
|
||||
```bash
|
||||
python scripts/get_time.py --convert "2024-01-01 12:00:00" --from-tz UTC --to-tz Asia/Shanghai
|
||||
```
|
||||
|
||||
## Output Format
|
||||
|
||||
脚本输出 JSON 格式:
|
||||
|
||||
```json
|
||||
{
|
||||
"datetime": "2024-01-15 10:30:00",
|
||||
"date": "2024-01-15",
|
||||
"time": "10:30:00",
|
||||
"timezone": "Asia/Shanghai",
|
||||
"weekday": "Monday",
|
||||
"timestamp": 1705285800
|
||||
}
|
||||
```
|
||||
|
||||
## Common Formats
|
||||
|
||||
| 格式 | 示例 |
|
||||
|------|------|
|
||||
| ISO | 2024-01-15T10:30:00+08:00 |
|
||||
| 中文 | 2024年01月15日 10:30:00 |
|
||||
| 美式 | 01/15/2024 |
|
||||
| 欧式 | 15/01/2024 |
|
||||
60
account/admin/skills/datetime-tool/references/REFERENCE.md
Normal file
60
account/admin/skills/datetime-tool/references/REFERENCE.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# DateTime Tool Reference
|
||||
|
||||
## 支持的时区
|
||||
|
||||
常用时区:
|
||||
- `UTC` - 协调世界时
|
||||
- `Asia/Shanghai` - 中国标准时间 (UTC+8)
|
||||
- `Asia/Tokyo` - 日本标准时间 (UTC+9)
|
||||
- `America/New_York` - 美国东部时间
|
||||
- `America/Los_Angeles` - 美国太平洋时间
|
||||
- `Europe/London` - 英国时间
|
||||
- `Europe/Paris` - 中欧时间
|
||||
|
||||
## 日期格式代码
|
||||
|
||||
| 代码 | 含义 | 示例 |
|
||||
|------|------|------|
|
||||
| `%Y` | 四位年份 | 2024 |
|
||||
| `%m` | 月份 (01-12) | 01 |
|
||||
| `%d` | 日期 (01-31) | 15 |
|
||||
| `%H` | 小时 (00-23) | 14 |
|
||||
| `%M` | 分钟 (00-59) | 30 |
|
||||
| `%S` | 秒 (00-59) | 45 |
|
||||
| `%A` | 星期全名 | Monday |
|
||||
| `%a` | 星期缩写 | Mon |
|
||||
| `%B` | 月份全名 | January |
|
||||
| `%b` | 月份缩写 | Jan |
|
||||
| `%Z` | 时区名称 | CST |
|
||||
| `%z` | UTC 偏移 | +0800 |
|
||||
|
||||
## 常用格式组合
|
||||
|
||||
```python
|
||||
# ISO 格式
|
||||
"%Y-%m-%dT%H:%M:%S%z" # 2024-01-15T14:30:00+0800
|
||||
|
||||
# 中文格式
|
||||
"%Y年%m月%d日 %H:%M:%S" # 2024年01月15日 14:30:00
|
||||
|
||||
# 美式格式
|
||||
"%m/%d/%Y %I:%M %p" # 01/15/2024 02:30 PM
|
||||
|
||||
# 文件名安全格式
|
||||
"%Y%m%d_%H%M%S" # 20240115_143000
|
||||
```
|
||||
|
||||
## 错误处理
|
||||
|
||||
脚本在遇到错误时会返回包含 `error` 字段的 JSON:
|
||||
|
||||
```json
|
||||
{
|
||||
"error": "Invalid timezone: Invalid/Zone"
|
||||
}
|
||||
```
|
||||
|
||||
常见错误:
|
||||
- 无效的时区名称
|
||||
- 无效的日期格式
|
||||
- 日期解析失败
|
||||
133
account/admin/skills/datetime-tool/scripts/get_time.py
Normal file
133
account/admin/skills/datetime-tool/scripts/get_time.py
Normal file
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
获取当前时间的脚本
|
||||
|
||||
用法:
|
||||
python get_time.py [options]
|
||||
|
||||
选项:
|
||||
--timezone <tz> 时区 (默认: 本地时区)
|
||||
--format <fmt> 日期格式 (默认: %Y-%m-%d %H:%M:%S)
|
||||
--diff <d1> <d2> 计算两个日期的差值
|
||||
--convert <dt> 转换时间
|
||||
--from-tz <tz> 源时区
|
||||
--to-tz <tz> 目标时区
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
from datetime import datetime, timedelta
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
|
||||
def get_current_time(timezone: str = None, fmt: str = None) -> dict:
|
||||
"""获取当前时间"""
|
||||
if timezone:
|
||||
try:
|
||||
tz = ZoneInfo(timezone)
|
||||
except KeyError:
|
||||
return {"error": f"Invalid timezone: {timezone}"}
|
||||
else:
|
||||
tz = None
|
||||
timezone = "local"
|
||||
|
||||
now = datetime.now(tz)
|
||||
fmt = fmt or "%Y-%m-%d %H:%M:%S"
|
||||
|
||||
weekday_names = [
|
||||
"Monday", "Tuesday", "Wednesday", "Thursday",
|
||||
"Friday", "Saturday", "Sunday"
|
||||
]
|
||||
|
||||
return {
|
||||
"datetime": now.strftime(fmt),
|
||||
"date": now.strftime("%Y-%m-%d"),
|
||||
"time": now.strftime("%H:%M:%S"),
|
||||
"year": now.year,
|
||||
"month": now.month,
|
||||
"day": now.day,
|
||||
"hour": now.hour,
|
||||
"minute": now.minute,
|
||||
"second": now.second,
|
||||
"weekday": weekday_names[now.weekday()],
|
||||
"weekday_num": now.weekday(),
|
||||
"timestamp": int(now.timestamp()),
|
||||
"iso_format": now.isoformat(),
|
||||
"timezone": timezone,
|
||||
}
|
||||
|
||||
|
||||
def calculate_diff(date1: str, date2: str) -> dict:
|
||||
"""计算两个日期的差值"""
|
||||
try:
|
||||
d1 = datetime.fromisoformat(date1.replace('/', '-'))
|
||||
d2 = datetime.fromisoformat(date2.replace('/', '-'))
|
||||
except ValueError as e:
|
||||
return {"error": f"Invalid date format: {e}"}
|
||||
|
||||
diff = abs(d2 - d1)
|
||||
|
||||
return {
|
||||
"date1": date1,
|
||||
"date2": date2,
|
||||
"days": diff.days,
|
||||
"seconds": diff.seconds,
|
||||
"total_seconds": int(diff.total_seconds()),
|
||||
"weeks": diff.days // 7,
|
||||
"months_approx": diff.days // 30,
|
||||
"years_approx": diff.days // 365,
|
||||
}
|
||||
|
||||
|
||||
def convert_timezone(dt_str: str, from_tz: str, to_tz: str) -> dict:
|
||||
"""转换时区"""
|
||||
try:
|
||||
from_zone = ZoneInfo(from_tz)
|
||||
to_zone = ZoneInfo(to_tz)
|
||||
except KeyError as e:
|
||||
return {"error": f"Invalid timezone: {e}"}
|
||||
|
||||
try:
|
||||
dt = datetime.fromisoformat(dt_str)
|
||||
dt = dt.replace(tzinfo=from_zone)
|
||||
converted = dt.astimezone(to_zone)
|
||||
except ValueError as e:
|
||||
return {"error": f"Invalid datetime format: {e}"}
|
||||
|
||||
return {
|
||||
"original": dt_str,
|
||||
"from_timezone": from_tz,
|
||||
"to_timezone": to_tz,
|
||||
"converted": converted.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"converted_iso": converted.isoformat(),
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="DateTime Tool")
|
||||
parser.add_argument("--timezone", "-tz", help="Timezone (e.g., Asia/Shanghai)")
|
||||
parser.add_argument("--format", "-f", help="Date format string")
|
||||
parser.add_argument("--diff", nargs=2, metavar=("DATE1", "DATE2"),
|
||||
help="Calculate difference between two dates")
|
||||
parser.add_argument("--convert", help="DateTime to convert")
|
||||
parser.add_argument("--from-tz", help="Source timezone for conversion")
|
||||
parser.add_argument("--to-tz", help="Target timezone for conversion")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.diff:
|
||||
result = calculate_diff(args.diff[0], args.diff[1])
|
||||
elif args.convert:
|
||||
if not args.from_tz or not args.to_tz:
|
||||
result = {"error": "Both --from-tz and --to-tz required for conversion"}
|
||||
else:
|
||||
result = convert_timezone(args.convert, args.from_tz, args.to_tz)
|
||||
else:
|
||||
result = get_current_time(args.timezone, args.format)
|
||||
|
||||
print(json.dumps(result, ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user