Unity中date相关问题

今天遇到了从服务器获取unix时间戳,将其转换为时间并显示的需求。Unity中可以使用C#中有关的date函数来处理这个问题。

首先UNIX时间戳的定义如下:

Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp

是从197011日(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 在这里表示总共相差多少个时间周期,也就是说,TickTimeSpan的计时单位。

因此

在这里将时间戳转换成了Tick计时单位。

下边是将时间转回unix时间戳

epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000


下边是日期格式的说明,大写的HH完成了24小时进制的转换


你可能感兴趣的:(Unity,积累,Unity,c#)