[Unity] Firebaseサーバから現在時刻をDateTimeで取得する方法

[Unity] Firebaseサーバから現在時刻をDateTimeで取得する方法 IT・プログラミング

※ 本記事にはプロモーションが含まれています。

こんにちは! ねこです。

今回は、Firebase の Firestore を利用している人がサーバの時間を DateTime で取得する方法をご説明します。

全体の流れ

まず、Firestore (Firebase) から直接サーバ時間を取得する方法は現状ないようです。

しかし、サーバにタイムスタンプを追加する FieldValue.ServerTimestamp を利用すれば可能です。

流れは以下になります。

  1. 任意の Firestore ドキュメントにタイムスタンプを追加
  2. そのドキュメントをクライアント側で読みこみ
  3. そのデータ(object 形式)を DateTime 形式に変換

うーん、、。ややこしい上に、不要なアクセスを入れてる気がするが、しょうがない。

サンプルコード

/// <summary>
/// Get the server time async.
/// </summary>
/// <returns>The time of the server.</returns>
public async UniTask<DateTime> GetServerTimeStampAsync()
{
    const string serverTimeStampKey = "time_stamp";
    var timeStampReferrence = Firestore.Collection("miscs").Document("server_time_stamp");
    var timeStampDocument = new Dictionary<string, object>
        {
            { serverTimeStampKey, Firebase.Firestore.FieldValue.ServerTimestamp }
        };

    await timeStampReferrence.SetAsync(timeStampDocument);
    
    var snapShot = await timeStampReferrence.GetSnapshotAsync();

    return DateTime
        .ParseExact(
            snapShot.ToDictionary()[serverTimeStampKey].ToString().Replace("Timestamp: ", "").Trim(),
            "yyyy-MM-ddTHH:mm:ss.fffZ",
            null
            );
}

もし、もっと良い書き方があれば教えて下さい (^^)。では!