Azure Functionを使っていて、DateTimeをJSTにしたいと思いました。
DateTime.Nowだとローカル時間らしいので、Functionsを置いたサーバー時間になりますよねきっと。
TimeZoneInfoが使えずエラー
macやlinuxだと下記のエラーになるようです。
macで開発しているのでエラーが出ましたぁ。。
System.Private.CoreLib: Exception while executing function: TestFunctions. System.Private.CoreLib: The time zone ID 'Tokyo Standard Time' was not found on the local computer. System.Private.CoreLib: Could not find file '/usr/share/zoneinfo/Tokyo Standard Time'.
NugetからTimeZoneConverterをインストール
TimeZoneConverterを使えば解決します。
NugetからTimeZoneConverterをインストール!
csprojに下記が追加されます。
<PackageReference Include="TimeZoneConverter" Version="3.2.0" />
サンプルソース
DateTimeを拡張してToJstする。
静的クラスにして、静的メソッドの引数にthisを付けて定義すると拡張できるようでした。
クラスの拡張が簡単にできるのは便利ですね。昔C#やってたけどやったことがなかったです🤔
using System;
using TimeZoneConverter;
namespace TestFunctions
{
/// <summary>
/// DateTimeEx
/// </summary>
public static class DateTimeEx
{
public static DateTime ToJst(this DateTime utc)
{
var jstZoneInfo = TZConvert.GetTimeZoneInfo("Tokyo Standard Time");
return TimeZoneInfo.ConvertTimeFromUtc(utc, jstZoneInfo);
}
}
}
使いかた
namespaceをusingしたら、こんな感じで使えます!
Console.WriteLine("UTC:"+DateTime.UtcNow);
Console.WriteLine("JST:"+DateTime.UtcNow.ToJst());
Console.WriteLine("LocalTime:" + DateTime.Now);
動作確認
ローカルで確認すると、下記のようになりました。
ローカル環境は日本時間に設定しているので、同じ結果ですね。これでFunctionがどこのサーバーでもJST変換されるハズ!いい感じ😇
UTC:2019/12/11 13:02:09
JST:2019/12/11 22:02:09
LocalTime:2019/12/11 22:02:09
コメント