Unity 工具之 获取当前系统时间,并格式化显示的封装(并有简单的月星期ampm转换)

    技术2022-07-12  69

     

     

    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是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“\”。

     

     

    Processed: 0.010, SQL: 9