夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLensアプリ内で現在の時間を取得する 前編 DateTime構造体を理解する

本日はアプリ内の表現枠です。

近年のゲーム機やスマートフォンではデバイスの時間を取得して機能を変えるというアプリケーションは一般的なものとなっています。

今回はHoloLensのアプリでHoloLensデバイスの時間にアクセスして取得してみます。

前編はスクリプトを書いてUnityで結果を見ていきます。

〇UnityでPCの現在時刻を取得する

C#ではデバイスの時間にアクセスする関数としてDateTimeが使用できます。

docs.microsoft.com

上記リンクのMicrosoftのリファレンスでは使用方法やできること、サンプルを見ることができます。

今回はDateTimeを使用して次のようなスクリプトを書きました。

using UnityEngine;
using System;


/// <summary>
/// デバイス内の現在の時間を取得する。
/// </summary>
public class TimeGetter : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        string _timeDate = DateTime.Now.ToString();
        Debug.Log(_timeDate);
    }
}

これを適当なゲームオジェクトにアタッチしてシーンを実行すると次のようにログが表示されます。

f:id:Holomoto-Sumire:20200915170335j:plain

年月日時分秒ミリ秒まで取得できることがわかります。

DateTime.Nowメソッドは年月日時分秒ミリ秒まで取得することができます。

〇年の取得

DateTime.Nowメソッドは年、月など個別で取得することもできます。

Start関数内を次のように書き換えました。

    void Start()
    {
        string _timeDate = DateTime.Now.Year.ToString();
        
        Debug.Log(_timeDate);
    }

これを実行します。

今年は2020年なので[2020]というように表示されました。

f:id:Holomoto-Sumire:20200915171226j:plain

〇月の取得

こちらもStart関数を次のように書き換えました。

    void Start()
    {
        string _timeDate = DateTime.Now.Month.ToString();
        
        Debug.Log(_timeDate);
    }

実行すると今月は9月なので[9]と表示されます。

f:id:Holomoto-Sumire:20200915171606j:plain

〇日付の取得

次は日付を取得します。 次のように書き換えました。 void Start() { string _timeDate = DateTime.Now.Day.ToString();

    Debug.Log(_timeDate);
}

15日なので[15]が取得できました。

[f:id:Holomoto-Sumire:20200915202515j:plain]

〇時間の取得

次は時間を取得します。

    void Start()
    {
        string _timeDate = DateTime.Now.Hour.ToString();
        
        Debug.Log(_timeDate);
    }

f:id:Holomoto-Sumire:20200915202809j:plain

〇分の取得

次は分を取得します。

    void Start()
    {
        string _timeDate = DateTime.Now.Minute.ToString();
        
        Debug.Log(_timeDate);
    }

f:id:Holomoto-Sumire:20200915202931j:plain

〇秒の取得

次は秒を取得します。

    void Start()
    {
        string _timeDate = DateTime.Now.Second.ToString();
        
        Debug.Log(_timeDate);
    }

f:id:Holomoto-Sumire:20200915203339j:plain

〇ミリセカンド

次にミリ秒を取得します。

  void Start()
    {
        string _timeDate = DateTime.Now.Millisecond.ToString();
        
        Debug.Log(_timeDate);
    }

f:id:Holomoto-Sumire:20200915203535j:plain

〇ある時刻からの経過時間

DateTimeを使用すればある時刻からの経過時間を取得することができます。

次のサンプルスクリプトでは2001年1月1日の新世紀が始まってからの時間を取得することができます。

    void Start()
    {
        DateTime centuryBegin = new DateTime(2001, 1, 1);
        DateTime currentDate = DateTime.Now;

        long elapsedTicks = currentDate.Ticks - centuryBegin.Ticks;
        TimeSpan elapsedSpan = new TimeSpan(elapsedTicks);

        Debug.Log("Elapsed from the beginning of the century to :"+currentDate);
        Debug.Log(elapsedTicks * 100 + "nanoseconds");
        Debug.Log(elapsedTicks + "ticks");
        Debug.Log(elapsedSpan.TotalSeconds + "seconds");
        Debug.Log(elapsedSpan.TotalMinutes + "minutes");     
    }

これを実行した結果が次のようになります。

f:id:Holomoto-Sumire:20200915205002j:plain

新しい世紀になって621895617743930700ナノ秒、621895617.743931秒、10364926.9623988分が経過していることが取得できます。

〇曜日の取得

次に曜日を取得します。

    void Start()
    {
        _timeDate = DateTime.Now.DayOfWeek.ToString();
        Debug.Log(_timeDate);
     
    }

曜日の取得にはDateTime.Now.DayOfWeekを用います。

実行結果は次のようになります。

f:id:Holomoto-Sumire:20200915205504j:plain

〇年度始からの経過日数

DateTime.Now.DayOfYearを使用すれば1月1日からの経過日数を取得できます。

 void Start()
    {
        _timeDate = DateTime.Now.DayOfYear.ToString();
        Debug.Log(_timeDate);
     
    }

f:id:Holomoto-Sumire:20200915205757j:plain

〇一日の経過時間を取得する

DateTime.Now.TimeOfDayを使用すれば一日の経過時間を取得できます。

    void Start()
    {
        _timeDate = DateTime.Now.TimeOfDay.ToString();
        Debug.Log(_timeDate);
     
    }

f:id:Holomoto-Sumire:20200915210031j:plain

以上がDateTime構造体です。 次回HoloLensアプリで使用していきます。