こんにちは。SAT-BOXのカピバラさんです。
ついに新年度が始まりました!
春もようやく目が覚めたようで、色んな所で桜が咲いていますね!
会社に行く途中や昼食でちらほらパリッとしたスーツで
新社会人だと思われる人をあちこちで見かけました。
僕も気持ちを改め、新社会人に負けないよう、
これからもガンガンゲームを作っていきたいと思います!
開始時間と終了時間の間で、ランダムな時間を取得する関数を作ったので紹介します。
まずはソースコード
public static DateTime RandomDateTime(DateTime _startDateTime , DateTime _endDatetime) { //開始時間が終了時間より後の時 if (_startDateTime > _endDatetime) return _startDateTime; TimeSpan span = _endDatetime - _startDateTime; float ranSpan = UnityEngine.Random.Range(0, (float)span.TotalMilliseconds); return _startDateTime + TimeSpan.FromMilliseconds(ranSpan); }
_startDateTime には開始時間を入れて
_endDateTime には終了時間を入れると、
開始時間と終了時間の間の時間をランダムに返してくれます(^▽^)/
DateTimeとTimeSpanの違い
まず、ここで出てくるのが「DateTime」「TimeSpan」です。
「DateTime」は時間の瞬間を表す構造体で、
「TimeSpan」は時間そのものを表す構造体です。
DateTimeは「4月3日5時30分」を表すのに対し、
TimeSpanは「1日と4時間20分」というように、
時間の間隔のようなものを表します。
僕のイメージですが、「タイミング」と「間隔」のような感じだと思います。
処理の説明
上記の処理としてやっていることは、
まず開始時間と終了時間の間隔を求めて、
TotalMillisecondsで先ほど求めた時間の間隔をミリ秒に直します。
例えば、3分30秒をミリ秒にすると…
TimeSpan ts = new TimeSpan(0, 3, 30, 00); Debug.Log("3分30秒は" + ts.TotalMilliseconds + "ミリ秒です"); //3分30秒は210000ミリ秒です
上記のような結果になります。
そのあと、0からその間隔の時間をランダムにします。
そのランダムにした値を開始時間に足すと
「何時何分」~「何時何分」の間のランダムな時間
を求めることが出来ます!!
ミリ秒をTimeSpanに戻すのは、FromMilliseconds関数でできます!
TimeSpanと秒の変換
下記のように変換します。
・(TimeSpan)→(ミリ秒)
(変換したいTimeSpan).TotalMilliseconds
・(ミリ秒)→(TimeSpan)
TimeSpan.FromMilliseconds(変換したいTimeSpan)
こんな感じです。
あまり使う機会はないと思いますが、使うときはどうぞ!
【参考にしたサイト】