読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

日数や時間の保存、取得、計算【C#】【Unity】

C# Unity

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

この記事でのバージョン
Unity 5.1.0f3 Personal


はじめに

今回は現在時刻を取得したり、経過日数を知りたい時の方法です。


DateTime

時間関連の処理を行う時は以下のようにDateTimeを使います。

using System; //DateTimeを使うのに必要

//現在時刻の取得
DateTime now = DateTime.Now;


このDateTimeを使うと計算も楽になります。

例えば経過日数を調べる場合は以下のような感じに。

//lastDateからnowへの経過日数 (lastDateとnowはDateTime)
int day = now.Subtract (lastDate).Days;


他にも日数をすすませるAddDays曜日を取得するDayOfWeekなど便利なメソッドが揃っています。

詳しくは以下のサイトが分かり易かったです。


日時、時間の計算をする: .NET Tips: C#, VB.NET


PlayerPrefsへ保存

時刻を保存しときたい、みたいな事もよくあると思いますが、

DateTimeはそのままPlayerPrefsを保存することはできません。

なので、ToBinaryを使ってバイナリ化したのち、ToStringを使ってstringで保存します。

//現在時刻の保存
DateTime now = DateTime.Now;
PlayerPrefs.SetString ("Key", now.ToBinary().ToString()); 
//保存していたデータの読み込み
string defult = new DateTime(20001116320, DateTimeKind.Local).ToBinary().ToString();//保存していたデータが存在しない時用のデフォルト値
string dateTimeString = PlayerPrefs.GetString ("Key", defult);

DateTime time  = System.DateTime.FromBinary (System.Convert.ToInt64 (datetimeString)); 



おわりに

便利なDateTimeですが、DateTime.Nowを使って現在時刻を取得すると端末の時間を取得するので、

ユーザ側で簡単に変更できてしまいます。

なのでスタミナ管理等に使ってしまうと、簡単に不正されてしまう点にはご注意を。