Unity中date相关问题
今天遇到了從服務器獲取unix時間戳,將其轉換為時間并顯示的需求。Unity中可以使用C#中有關的date函數來處理這個問題。
首先UNIX時間戳的定義如下:
Unix時間戳(英文為Unix?epoch,?Unix?time,?POSIX?time?或?Unix?timestamp)
是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒。
UNIX時間戳的0按照ISO?8601規范為?:1970-01-01T00:00:00Z.
一個小時表示為UNIX時間戳格式為:3600秒;一天表示為UNIX時間戳為86400秒,閏秒不計算。
在大多數的UNIX系統中UNIX時間戳存儲為32位,這樣會引發2038年問題或Y2038。
DateTime?dt?=?DateTime.Now;?
dt.ToString();
dt.ToFileTime().ToString();
dt.ToFileTimeUtc().ToString();
dt.ToLocalTime().ToString();
dt.ToLongDateString().ToString();
dt.ToLongTimeString().ToString();
dt.ToOADate().ToString();
dt.ToShortDateString().ToString();
dt.ToShortTimeString().ToString();
dt.ToUniversalTime().ToString();
dt.Year.ToString();
dt.Date.ToString();
dt.DayOfWeek.ToString();
dt.DayOfYear.ToString();
dt.Hour.ToString();
dt.Millisecond.ToString();
dt.Minute.ToString();
dt.Month.ToString();
dt.Second.ToString();
dt.Ticks.ToString();
dt.TimeOfDay.ToString();
Unity中運行結果如下:
值得注意的是Unity中似乎默認的都是12進制,而不是24小時的。策劃要求24小時進制顯示,因此最后我的UNIX時間戳轉換代碼如下:
/* 將UNIX時間戳轉換成系統時間 */ public static string getTime(string _time) { string timeStamp = _time; DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));//基準值 long lTime = long.Parse(timeStamp + "0000000"); //轉換到Tick計時單位 TimeSpan toNow = new TimeSpan(lTime); DateTime dtResult = dtStart.Add(toNow); string date = dtResult.ToShortDateString().ToString(); string time = dtResult.ToString("HH:mm:ss").ToString(); //24進制string[] date_arr = date.Split('/'); string[] time_arr = time.Split(':'); string result = date_arr[0]+"月"+date_arr[1]+"日"+" "+time_arr[0]+":"+time_arr[1]; return result; }
這里再說下TimeSpan
TimeSpan是用來表示一個時間段的實例,兩個時間的差可以構成一個TimeSpan實例
DateTime.Tick?:是一個計時周期,表示一百納秒,即一千萬分之一秒,那么?Ticks?在這里表示總共相差多少個時間周期,也就是說,Tick是TimeSpan的計時單位。
因此
在這里將時間戳轉換成了Tick計時單位。
下邊是將時間轉回unix時間戳
epoch?=?(DateTime.Now.ToUniversalTime().Ticks?-?621355968000000000)?/?10000000
下邊是日期格式的說明,大寫的HH完成了24小時進制的轉換
總結
以上是生活随笔為你收集整理的Unity中date相关问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity3D研究院之获取摄像机的视口区
- 下一篇: 6U VPX 高性能计算存储板卡