[AzureFunction][C#]DateTimeの取得時間をJSTにする

C#

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

コメント

タイトルとURLをコピーしました