mcpField
D
dotnet-timezone

dotnet-timezone

github.com/github开发40.5k1.6k 次安装1 天前更新
代码仓库

关于 dotnet-timezone

面向 .NET 和 C# 开发者的时区处理技能,提供实现建议和可直接使用的代码模式。内容涵盖时区 ID 查询、转换、跨平台兼容及夏令时排程问题。

主要功能

  1. 01映射 Windows 与 IANA 时区 ID
  2. 02根据地点查找时区 ID
  3. 03生成 C# 转换代码片段
  4. 04按平台需求选择库
  5. 05处理夏令时排程边界情况
  6. 06提示存储与 API 常见问题

适用场景

  1. 01将 UTC 转换为地点本地时间
  2. 02实现跨平台时区处理
  3. 03实现跨夏令时的周期任务
  4. 04为 API 选择时区格式

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/github/awesome-copilot --skill dotnet-timezone

安装后在 Claude Code 中输入/dotnet-timezone确认已加载。

附带文件references/code-patterns.mdreferences/timezone-index.md

详细介绍

.NET 时区

为 .NET 和 C# 代码解决时区问题,提供生产环境安全的指导以及可直接复制粘贴的代码片段。

从正确的路径开始

首先识别请求类型:

  • 地址或位置查询
  • 时区 ID 查询
  • UTC/本地时间转换
  • 跨平台时区兼容性
  • 调度或 DST 处理
  • API 或持久化设计

如果库不明确,跨平台工作默认使用 TimeZoneConverter。如果场景涉及重复性调度或严格的 DST 规则,优先使用 NodaTime。

解析地址和位置

如果用户提供了地址、城市、地区、国家/地区或包含地名的文档:

  1. 从输入中提取每个位置。
  2. 阅读 references/timezone-index.md 获取常见的 Windows 和 IANA 映射。
  3. 如果未列出确切位置,根据地理信息推断正确的 IANA 时区,然后将其映射到 Windows ID。
  4. 同时返回两个 ID 以及一个可直接使用的 C# 示例。

对于每个解析出的位置,提供:

Location: <resolved place>
Windows ID: <windows id>
IANA ID: <iana id>
UTC offset: <standard offset and DST offset when relevant>
DST: <yes/no>

然后包含一个跨平台代码片段,例如:

using TimeZoneConverter;

TimeZoneInfo tz = TZConvert.GetTimeZoneInfo("Asia/Colombo");
DateTime local = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz);

如果存在多个位置,为每个位置包含一个代码块,然后提供一个组合的多时区代码片段。

如果某个位置有歧义,列出可能的时区匹配项,并请用户选择正确的一个。

查询时区 ID

使用 references/timezone-index.md 进行 Windows 到 IANA 的映射。

始终提供两种格式:

  • Windows ID,用于 Windows 上的 TimeZoneInfo.FindSystemTimeZoneById()
  • IANA ID,用于 Linux、容器、NodaTime 和 TimeZoneConverter

生成代码

使用 references/code-patterns.md,并选择最适合的最小模式:

  • 模式 1:TimeZoneInfo 用于仅限 Windows 的代码
  • 模式 2:TimeZoneConverter 用于跨平台转换
  • 模式 3:NodaTime 用于严格的时区运算和对 DST 敏感的调度
  • 模式 4:DateTimeOffset 用于 API 和数据传输
  • 模式 5:ASP.NET Core 持久化和呈现
  • 模式 6:重复性作业和调度器
  • 模式 7:有歧义和无效的 DST 时间戳

推荐第三方库时,始终包含包相关指导。

警告常见陷阱

在适用时提及相关警告:

  • TimeZoneInfo.FindSystemTimeZoneById() 的时区 ID 是平台特定的。
  • 避免将 DateTime.Now 存储到数据库中;应改为存储 UTC。
  • 除非这是有意输入,否则将 DateTimeKind.Unspecified 视为 bug 风险。
  • DST 转换可能会跳过或重复本地时间。
  • Azure Windows 和 Azure Linux 环境可能期望不同的时区 ID 格式。

响应形式

对于地址和位置请求:

  1. 为每个位置返回解析后的时区块。
  2. 用一句话说明推荐的实现方式。
  3. 包含一个可直接复制粘贴的 C# 代码片段。

对于代码和架构请求:

  1. 用一句话说明推荐的方法。
  2. 如果相关,提供时区 ID。
  3. 包含最小可运行代码片段。
  4. 如果需要,提及包要求。
  5. 如果重要,添加一条陷阱警告。

保持响应简洁且代码优先。

参考资料

  • references/timezone-index.md:常见的 Windows 和 IANA 时区映射
  • references/code-patterns.md:可直接使用的 .NET 时区模式

评论

支持 Markdown