Unity 工具之 獲取當前系統時間,並格式化顯示的封裝(並有簡單的月星期am/pm轉換)

 

 

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是任意字符。照原義顯示字符。若要顯示反斜槓字符,請使用“\”。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章