Unity 工具之 獲取當前系統時間,並格式化顯示的封裝(並有簡單的月星期am/pm轉換)
目錄
Unity 工具之 獲取當前系統時間,並格式化顯示的封裝(並有簡單的月星期am/pm轉換)
七、System.DateTime.Now.ToString() 格式化字符相關說明
一、簡單介紹
Unity 工具類,自己整理的一些遊戲開發可能用到的模塊,單獨獨立使用,方便遊戲開發。
本節介紹,簡單的獲取系統時間,並且格式化顯示,並處理一些時間顯示,來符合使用要求。
二、實現原理
1、調用 System.DateTime.Now ,獲取系統時間
2、類似 System.DateTime.Now.ToString("hh:mm:ss tt") 形式格式化顯示
三、注意事項
1、格式上午 /下午 (AM/PM)不同設備,顯示可能不一樣(Win 可能顯示上午/下午,Android 可能顯示AM/PM,等)
四、效果預覽
五、實現步驟
1、打開Unity,新建一個空工程
2、在場景中佈局UI,簡單的顯示一下獲取到的 DateTime 數據
3、新建腳本,編輯腳本 GetDateTimeWrapper 獲取系統時間,並且必要的格式話調整,便於接口調用,TestScript 測試 GetDateTimeWrapper 的接口,Singleton 單例類
4、把 TestScript 掛載到場景中,並對應賦值 UI
5、運行場景,效果如下
六、關鍵代碼
1、GetDateTimeWrapper
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GetDateTimeWrapper : Singleton<GetDateTimeWrapper>
{
// 星期幾的英文縮寫
string[] Day = new string[]{ "Sun","Mon", "Tue", "Wed", "Thu","Fri","Sat" };
// 月份的英文縮寫
string[] Month = new string[]{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec" };
/// <summary>
/// 獲取當前時間 時
/// </summary>
/// <returns></returns>
public int GetCurrentHour() {
return DateTime.Now.Hour;
}
/// <summary>
/// 獲取當前時間 分
/// </summary>
/// <returns></returns>
public int GetCurrentMinute()
{
return DateTime.Now.Minute;
}
/// <summary>
/// 獲取當前時間 時:分 am/pm
/// </summary>
/// <returns></returns>
public string GetCurrentTime_hmt()
{
#if UNITY_EDITOR
return DateTime.Now.ToString("tt").Equals("上午") ? DateTime.Now.ToString("hh:mm") + " am" : DateTime.Now.ToString("hh:mm") + " pm";
#else
// 移動端 AM/PM 爲大寫,如需要轉換小寫的話,(也可以直接最後最後一次轉爲小寫)
return DateTime.Now.ToString("tt").ToLower().Equals("am")? DateTime.Now.ToString("hh:mm") + " am" : DateTime.Now.ToString("hh:mm") + " pm";
#endif
}
/// <summary>
/// 獲取當前時間 日
/// </summary>
/// <returns></returns>
public int GetCurrentDay() {
return DateTime.Now.Day;
}
/// <summary>
/// 獲取當前時間 月
/// </summary>
/// <returns></returns>
public string GetCurrentMonth()
{
return Month[DateTime.Now.Month-1];
}
/// <summary>
/// 獲取當前時間 星期
/// </summary>
/// <returns></returns>
public string GetCurrentDayOfWeek()
{
return Day[(int)(DateTime.Now.DayOfWeek)];
}
/// <summary>
/// 獲取當前時間 星期
/// </summary>
/// <returns></returns>
public string GetCurrentDate_dMw()
{
return string.Format("{0} {1},{2}", GetCurrentDay(), GetCurrentMonth(),GetCurrentDayOfWeek());
}
}
2、GetDateTimeWrapper
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TestScript : MonoBehaviour
{
public Text Text0;
public Text Text1;
public Text Text2;
// Start is called before the first frame update
void Start()
{
Text0.text = GetDateTimeWrapper.Instance.GetCurrentTime_hmt();
Text1.text = GetDateTimeWrapper.Instance.GetCurrentDate_dMw();
Text2.text = System.DateTime.Now.ToString("hh:mm:ss tt");
Debug.Log(GetDateTimeWrapper.Instance.GetCurrentTime_hmt());
Debug.Log(GetDateTimeWrapper.Instance.GetCurrentDate_dMw());
Debug.Log(System.DateTime.Now.ToString("hh:mm:ss tt"));
}
}
3、Singleton
public abstract class Singleton<T> where T : class, new()
{
private static T instance = null;
// 多線程安全機制
private static readonly object locker = new object();
public static T Instance
{
get
{
lock (locker)
{
if (instance == null)
instance = new T();
return instance;
}
}
}
}
七、System.DateTime.Now.ToString() 格式化字符相關說明
d |
月中的某一天。一位數的日期沒有前導零。 |
dd |
月中的某一天。一位數的日期有一個前導零。 |
ddd |
週中某天的縮寫名稱,在 AbbreviatedDayNames 中定義。 |
dddd |
週中某天的完整名稱,在 DayNames 中定義。 |
M |
月份數字。一位數的月份沒有前導零。 |
MM |
月份數字。一位數的月份有一個前導零。 |
MMM |
月份的縮寫名稱,在 AbbreviatedMonthNames 中定義。 |
MMMM |
月份的完整名稱,在 MonthNames 中定義。 |
y |
不包含紀元的年份。如果不包含紀元的年份小於 10,則顯示不具有前導零的年份。 |
yy |
不包含紀元的年份。如果不包含紀元的年份小於 10,則顯示具有前導零的年份。 |
yyyy |
包括紀元的四位數的年份。 |
gg |
時期或紀元。如果要設置格式的日期不具有關聯的時期或紀元字符串,則忽略該模式。 |
h |
12小時制的小時。一位數的小時數沒有前導零。 |
hh |
12小時制的小時。一位數的小時數有前導零。 |
H |
24小時制的小時。一位數的小時數沒有前導零。 |
HH |
24小時制的小時。一位數的小時數有前導零。 |
m |
分鐘,一位數的分鐘數沒有前導零。 |
mm |
分鐘,一位數的分鐘數有一個前導零。 |
s |
秒,一位數的秒數沒有前導零。 |
ss |
秒,一位數的秒數有一個前導零。 |
f |
秒的小數精度爲一位。其餘數字被截斷。 |
ff |
秒的小數精度爲兩位。其餘數字被截斷。 |
fff |
秒的小數精度爲三位。其餘數字被截斷。 |
ffff |
秒的小數精度爲四位。其餘數字被截斷。 |
fffff |
秒的小數精度爲五位。其餘數字被截斷。 |
ffffff |
秒的小數精度爲六位。其餘數字被截斷。 |
fffffff |
秒的小數精度爲七位。其餘數字被截斷。 |
t |
在AMDesignator或PMDesignator中定義的AM/PM指示項的第一個字符(如果存在)。 |
tt |
在AMDesignator或PMDesignator中定義的AM/PM指示項(如果存在)。 |
z |
時區偏移量(“+”或“-”後面僅跟小時)。一位數的小時數沒有前導零。例如,太平洋標準時間是“-8”。 |
zz |
時區偏移量(“+”或“-”後面僅跟小時)。一位數的小時數有前導零。例如,太平洋標準時間是“-08”。 |
zzz |
完整時區偏移量(“+”或“-”後面跟有小時和分鐘)。一位數的小時數和分鐘數有前導零。例如,太平洋標準時間是“-08:00”。 |
: |
在TimeSeparator中定義的默認時間分隔符。 |
/ |
在DateSeparator中定義的默認日期分隔符。 |
%c |
其中c是格式模式(如果單獨使用)。如果格式模式與原義字符或其他格式模式合併,則可以省略“%”字符。 |
c |
其中c是任意字符。照原義顯示字符。若要顯示反斜槓字符,請使用“\”。 |