※ 本記事にはプロモーションが含まれています。
こんにちは! ねこです。
今回は、Firebase の Firestore を利用している人がサーバの時間を DateTime で取得する方法をご説明します。
全体の流れ
まず、Firestore (Firebase) から直接サーバ時間を取得する方法は現状ないようです。
しかし、サーバにタイムスタンプを追加する FieldValue.ServerTimestamp を利用すれば可能です。
流れは以下になります。
- 任意の Firestore ドキュメントにタイムスタンプを追加
- そのドキュメントをクライアント側で読みこみ
- そのデータ(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
);
}
もし、もっと良い書き方があれば教えて下さい (^^)。では!