読者です 読者をやめる 読者になる 読者になる
名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

開始と終了の間の時間をランダムで取得する

こんにちは。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)


こんな感じです。

あまり使う機会はないと思いますが、使うときはどうぞ!

【参考にしたサイト】

時間を表すTimeSpanオブジェクトを作成する、情報を取得する: .NET Tips: C#, VB.NET

TimeSpan 構造体 (System)