mcpField
D
dotnet-timezone

dotnet-timezone

github.com/github開発40.5k1.6k 回インストール今日更新
リポジトリ

dotnet-timezone について

.NET と C# の開発者向けに、実装方法とすぐ使えるコード例を示すタイムゾーン対応スキルです。ID検索、変換、クロスプラットフォーム互換性、サマータイムを考慮したスケジューリングを扱います。

主な機能

  1. 01WindowsとIANAのタイムゾーンID対応
  2. 02場所からタイムゾーンIDを特定
  3. 03C#変換コードの生成
  4. 04環境に応じたライブラリ選択
  5. 05サマータイム時のスケジュール例外対応
  6. 06保存とAPIの注意点提示

活用シーン

  1. 01UTCを地域の現地時刻に変換
  2. 02クロスプラットフォームの時刻処理
  3. 03サマータイムをまたぐ定期ジョブの実装
  4. 04APIで使うタイムゾーン形式の選択

インストール

コマンドをコピーしてターミナルで実行します。

$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. 一般的な Windows と IANA の対応関係について、references/timezone-index.md を参照します。
  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);

複数の場所がある場合は、場所ごとに 1 つのブロックを含め、その後に複数タイムゾーンをまとめて扱うスニペットを示します。

場所を特定できない場合は、該当するタイムゾーンの候補を列挙し、ユーザーに正しいものを選んでもらいます。

タイムゾーン ID を検索する

Windows と IANA の対応関係には、references/timezone-index.md を使用します。

常に両方の形式を提示します。

  • Windows 上で TimeZoneInfo.FindSystemTimeZoneById() に使用する Windows ID
  • Linux、コンテナー、NodaTime、TimeZoneConverter に使用する IANA ID

コードを生成する

references/code-patterns.md を使用し、要件に合う最小限のパターンを選びます。

  • パターン 1:Windows 専用コード用の TimeZoneInfo
  • パターン 2:クロスプラットフォーム変換用の TimeZoneConverter
  • パターン 3:厳密なタイムゾーン演算と DST の影響を受けるスケジューリング用の NodaTime
  • パターン 4:API とデータ転送用の DateTimeOffset
  • パターン 5:ASP.NET Core の永続化と表示
  • パターン 6:定期的なジョブとスケジューラー
  • パターン 7:DST における曖昧な時刻と無効な時刻のタイムスタンプ

サードパーティ製ライブラリを推奨する場合は、必ずパッケージに関する案内を含めます。

よくある落とし穴に注意する

該当する場合は、次の警告を記載します。

  • TimeZoneInfo.FindSystemTimeZoneById() で使用するタイムゾーン ID は、プラットフォームによって異なります。
  • データベースに DateTime.Now を保存するのは避け、代わりに UTC を保存してください。
  • DateTimeKind.Unspecified が意図的な入力でない場合は、バグの原因になり得るものとして扱ってください。
  • DST の切り替え時には、ローカル時刻がスキップされたり、繰り返されたりすることがあります。
  • Azure Windows と Azure Linux の環境では、異なる形式のタイムゾーン ID が必要になる場合があります。

回答の形式

住所や場所に関するリクエストの場合:

  1. 場所ごとに、解決したタイムゾーンのブロックを返します。
  2. 推奨する実装を 1 文で説明します。
  3. そのままコピーして使える C# のスニペットを含めます。

コードやアーキテクチャに関するリクエストの場合:

  1. 推奨する方法を 1 文で説明します。
  2. 関連する場合は、タイムゾーン ID を提示します。
  3. 最小限の動作するコードスニペットを含めます。
  4. 必要に応じて、パッケージ要件を記載します。
  5. 該当する場合は、落とし穴に関する警告を 1 つ追加します。

回答は簡潔にし、コードを中心にします。

参考資料

  • references/timezone-index.md:一般的な Windows と IANA のタイムゾーン対応関係
  • references/code-patterns.md:すぐに使える .NET のタイムゾーンパターン

コメント