国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity跨天的判斷,以及時(shí)間戳轉(zhuǎn)換成天時(shí)分秒

這篇具有很好參考價(jià)值的文章主要介紹了Unity跨天的判斷,以及時(shí)間戳轉(zhuǎn)換成天時(shí)分秒。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

有時(shí)候策劃需要一個(gè)第二天0點(diǎn)刷新活動(dòng)界面的操作,這個(gè)案例可以幫助解決部分問題。

然后測試了下時(shí)間戳的相互轉(zhuǎn)換以及倒計(jì)時(shí)的計(jì)時(shí)操作等等。

寫了一些常用的時(shí)間戳轉(zhuǎn)換和時(shí)間戳解析的函數(shù)。

詳情看代碼邏輯和注釋。

using System;
using UnityEngine;

namespace Assets.Test
{
    public class TimeTest : MonoBehaviour
    {
        //一天總共的秒數(shù)
        private const int CN_ONE_DAY_SECONDS = 24 * 60 * 60;
        //一小時(shí)總共的秒數(shù)
        private const int CN_ONE_HOUR_SECONDS = 60 * 60;
        //一分鐘總共的秒數(shù)
        private const int CN_ONE_MIN_SECONDS = 60;
        //明天0點(diǎn)的時(shí)間戳
        private long _nextDayMidNight = 0;
        private bool _hasRefeshed = false;
        //當(dāng)前界面停留的總時(shí)間(秒)
        private float _passTime = 0;
        //用于減少打印次數(shù),間隔1秒進(jìn)行打印顯示
        private float _lastPassTime = 1;
        /// <summary>
        /// 當(dāng)前的時(shí)間戳
        /// </summary>
        private long TimeStampNow
        {
            get
            {
                return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
            }
        }

        private delegate void OnNewDayComming();
        private event OnNewDayComming OnNewDayEvent;

        private void Awake()
        {
            //用明天0點(diǎn)的時(shí)間戳作為結(jié)束時(shí)間
            _nextDayMidNight = GetNextDayZeroTimeStamp();
            //int reaminSec = (int)(_nextDayMidNight - TimeStampNow);
            晚上12點(diǎn)的倒計(jì)時(shí)
            //Debug.LogFormat("到今晚0點(diǎn)剩余時(shí)間:{0}", ConvertSecToDHMS(reaminSec));
            //設(shè)置一個(gè)到時(shí)的觸發(fā)事件
            OnNewDayEvent += OnNewDayRefeshData;
        }

        private void OnNewDayRefeshData() 
        {
            Debug.Log("新的一天了!");
        }

        private void Update()
        {
            //TODO  這里其實(shí)是有問題的,沒有進(jìn)行輪詢的操作。 只算了第二天的0點(diǎn),如果是第三天0點(diǎn)這里就不行了的
            if (TimeStampNow >= _nextDayMidNight && !_hasRefeshed)
            {
                //到點(diǎn)之后執(zhí)行回調(diào)
                _hasRefeshed = true;
                if (OnNewDayEvent != null)
                {
                    OnNewDayEvent();
                }
            }
            else
            {
                //計(jì)算當(dāng)前經(jīng)過的總時(shí)間(每幀執(zhí)行的時(shí)間相加)
                _passTime += Time.deltaTime;
                //每隔1秒進(jìn)入一次打印
                if (_passTime - _lastPassTime > 1)
                {
                    _lastPassTime = _passTime;
                    Debug.LogFormat("到今晚0點(diǎn)剩余時(shí)間:{0}", ConvertSecToDHMS((int)(_nextDayMidNight - TimeStampNow)));
                }
            }
        }

        /// <summary>
        /// 把秒數(shù)轉(zhuǎn)換成天時(shí)分秒
        /// </summary>
        /// <param name="totalSeconds">總的秒數(shù)</param>
        /// <returns></returns>
        private string ConvertSecToDHMS(int totalSeconds)
        {
            int days    = totalSeconds / CN_ONE_DAY_SECONDS;
            int hours   = totalSeconds % CN_ONE_DAY_SECONDS  / CN_ONE_HOUR_SECONDS;
            int minutes = totalSeconds % CN_ONE_HOUR_SECONDS / CN_ONE_MIN_SECONDS;
            int seconds = totalSeconds % CN_ONE_HOUR_SECONDS % CN_ONE_MIN_SECONDS;
            return string.Format("{0}天:{1}時(shí):{2}分:{3}秒:", days, hours, minutes, seconds);
        }

        //獲取第二天的0點(diǎn)的時(shí)間戳(游戲中常用作活動(dòng)的刷新,可以做個(gè)計(jì)時(shí)器,獲取到這個(gè)時(shí)間戳然后我當(dāng)前時(shí)間戳相減做回調(diào)處理)
        private long GetNextDayZeroTimeStamp()
        {
            //當(dāng)天0時(shí)0分0秒
            DateTime todayMidnight = DateTime.Now.Date;
            //第二天的0時(shí)0分0秒
            DateTime nextDayMidnight = todayMidnight.AddDays(1);
            return ConvertToTimeStamp(nextDayMidnight);
        }

        /// <summary>
        /// DateTime轉(zhuǎn)時(shí)間戳
        /// </summary>
        /// <param name="targetDateTime">DateTime</param>
        /// <returns>時(shí)間戳(秒)</returns>
        public long ConvertToTimeStamp(DateTime targetDateTime)
        {
            return (targetDateTime.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
        }

        /// <summary>
        /// 時(shí)間戳轉(zhuǎn)DateTime
        /// </summary>
        /// <param name="timeStamp">時(shí)間戳(秒)</param>
        /// <returns>DateTime</returns>
        public DateTime GetDateTimeFromTimeStamp(long timeStamp)
        {
            //獲取到當(dāng)前時(shí)區(qū)的開始時(shí)間戳
            DateTime startDateTime = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(1970, 1, 1, 0, 0, 0), TimeZoneInfo.Local);
            long targetTimeStamp = ((long)timeStamp * 10000000);
            TimeSpan targetTS = new TimeSpan(targetTimeStamp);
            DateTime targetDateTime = startDateTime.Add(targetTS);
            return targetDateTime;
        }
    }
}

運(yùn)行的效果,每隔1秒顯示下倒計(jì)時(shí):

unity timespane轉(zhuǎn)換成秒,Unity,unity,游戲引擎,java

?文章來源地址http://www.zghlxwxcb.cn/news/detail-553647.html

到了這里,關(guān)于Unity跨天的判斷,以及時(shí)間戳轉(zhuǎn)換成天時(shí)分秒的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包