[Unity]時間の取得と計算DateTimeの使い方[メモ]

現在日時の取得と計算に必要になるDateTime構造体とTimeSpan構造体についてのメモ。

日時の取得

DateTime構造体のインスタンス生成

まずUnityでDateTime構造体を使うにはusingディレクティブにSystemの名前空間が必要になります。(4行目)

インスタンスの生成方法には、コンストラクタの引数で年、月、日(さらに詳細に時、分、秒)を指定する場合と、Nowプロパティまたは、Todayプロパティを使用して現在日時から生成する場合があります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class Sample_DateTime : MonoBehaviour {

    //コンストラクタ引数指定
    DateTime date1 = new DateTime(2017, 11, 04);                //2017年11月4日
    DateTime date2 = new DateTime(2017, 11, 04, 22, 05, 30);    //2017年11月4日22時5分30秒

    //プロパティで生成
    DateTime today = DateTime.Today;    //現在の日付(年、月、日)のみ時刻は0:00:00となる
    DateTime now = DateTime.Now;        //現在の日時(年、月、日、時、分、秒、1/100秒)

}

プロパティ

以下のプロパティは読み取り専用で不変オブジェクトです。

    void Start()
    {
        //プロパティ
        DateTime today = DateTime.Today;    
        DateTime now = DateTime.Now;        

        int year = now.Year;                // 年
        int month = now.Month;              // 月
        int day = now.Day;                  // 日
        int hour = now.Hour;                // 時
        int minute = now.Minute;            // 分
        int second = now.Second;            // 秒
        int millisecond = now.Millisecond;  // 1/100秒

    DayOfWeek dayOfWeek = now.DayOfWeek;// 曜日
    }

曜日はDayOfWeek列挙型で public enum DayOfWeek{

Sunday=0,Monday=1,Tuesday=2,Wednesday=3,Thursday=4,Friday=5,Saturday=6

}のように定義されている。

閏年の判定

        bool isLeapYear = DateTime.IsLeapYear(2017);

今年の通算日

        DateTime now = DateTime.Now;
        int dayOfYear = now.DayOfYear; //今年の1月1日からnowまでの通算日

日時の計算

DateTimeのAdd系メソッドを使う場合

        //指定時間後、指定時間前の取得
        DateTime now = DateTime.Now;        //現在の日時(年、月、日、時、分、秒、1/100秒)
        DateTime future = now.AddHours(1).AddMinutes(2).AddSeconds(3);      //nowの1時間2分3秒後

TimeSpan構造体を使う場合

        //指定時間後、指定時間前の取得
        DateTime now = DateTime.Now;        //現在の日時(年、月、日、時、分、秒、1/100秒)
        DateTime future = now + new TimeSpan(0, 1, 2, 3, 4);//nowの0日1時間2分3秒4ミリ秒後
        DateTime past = now - new TimeSpan(5, 6, 7, 8, 9);  //nowの5日6時間7分8秒9ミリ秒前

        TimeSpan diff = future - past;      //二つの日時の差

TimeSpan構造体のプロパティ

        TimeSpan diff = future - past;      //二つの日時の差

        //プロパティ
        int days = diff.Days;                   //日の時間間隔
        int hours = diff.Hours;                 //時間の時間間隔
        int minutes = diff.Minutes;             //分の時間間隔
        int seconds = diff.Seconds;             //秒の時間間隔
        int milliseconds = diff.Milliseconds;   //ミリ秒の時間間隔

        long ticks = diff.Ticks;                            //値を表わすタイマー刻みの数
        double totalDays = diff.TotalDays;                  //少数を使って日数単位で表示
        double totalHours = diff.TotalHours;                //少数を使って時間単位で表示
        double totalMinutes = diff.TotalMinutes;            //少数を使って分単位で表示
        double totalSeconds = diff.TotalSeconds;            //少数を使って秒単位で表示
        double totalMilliseconds = diff.TotalMilliseconds;  //少数を使ってミリ秒単位で表示

プロパティで日や時間のみを取り出して計算するときそれより下の単位は切り捨てられることに注意!!(Dateプロパティ同士の計算で出される答えはint型の日数となり時刻の情報はなくなる)

PlayerPrefsに保存する

    public DateTime Date
    {
        get
        {
            return DateTime.FromBinary(System.Convert.ToInt64(PlayerPrefs.GetString("date")));
        }
        set
        {
            PlayerPrefs.SetString("date", value.ToBinary().ToString());
        }
    }

PlayerPrefsに保存するためにDateTime.ToBinary().ToString()で文字列にしてる。取り出すときはDateTime.FromBinary(System.Convert.ToInt64())で戻して使ってる。

PlayerPrefsについて

[Unity]データセーブPlayerPrefsについて[メモ]
PlayerPrefsについて PlayerPrefsでは、string型のkeyと保存したい値を指定して、プレイヤーデータのセーブ、ロー...

シェアする

  • このエントリーをはてなブックマークに追加

フォローする