dotnet-timezone について
.NET と C# の開発者向けに、実装方法とすぐ使えるコード例を示すタイムゾーン対応スキルです。ID検索、変換、クロスプラットフォーム互換性、サマータイムを考慮したスケジューリングを扱います。
主な機能
- 01WindowsとIANAのタイムゾーンID対応
- 02場所からタイムゾーンIDを特定
- 03C#変換コードの生成
- 04環境に応じたライブラリ選択
- 05サマータイム時のスケジュール例外対応
- 06保存とAPIの注意点提示
活用シーン
- 01UTCを地域の現地時刻に変換
- 02クロスプラットフォームの時刻処理
- 03サマータイムをまたぐ定期ジョブの実装
- 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 を推奨します。
住所と場所を解決する
ユーザーが住所、市区町村、地域、国、または地名を含む文書を指定した場合:
- 入力から各場所を抽出します。
- 一般的な Windows と IANA の対応関係について、
references/timezone-index.mdを参照します。 - 場所が一覧にない場合は、地理情報から正しい IANA ゾーンを推定し、Windows ID に対応付けます。
- 両方の 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 文で説明します。
- そのままコピーして使える C# のスニペットを含めます。
コードやアーキテクチャに関するリクエストの場合:
- 推奨する方法を 1 文で説明します。
- 関連する場合は、タイムゾーン ID を提示します。
- 最小限の動作するコードスニペットを含めます。
- 必要に応じて、パッケージ要件を記載します。
- 該当する場合は、落とし穴に関する警告を 1 つ追加します。
回答は簡潔にし、コードを中心にします。
参考資料
references/timezone-index.md:一般的な Windows と IANA のタイムゾーン対応関係references/code-patterns.md:すぐに使える .NET のタイムゾーンパターン