• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            積木

            No sub title

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(1)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            此篇文章打算介紹兩個(gè),在平時(shí)工作中,使用頻繁并且十分有價(jià)值的功能。(因?yàn)槟愕捻?xiàng)目不用到還好,只要用到,下面這兩個(gè)一般是必不可少)
            功能點(diǎn)1:將本地時(shí)間轉(zhuǎn)成格林威治時(shí)間,或者是將格林威治時(shí)間轉(zhuǎn)成本地時(shí)間。
            功能點(diǎn)2:將時(shí)間轉(zhuǎn)成時(shí)間戳,以及如何將時(shí)間戳轉(zhuǎn)成時(shí)間。
            有些人可看剛看到上面的功能點(diǎn)概述,可能會(huì)覺(jué)得這沒(méi)什么難的。也的確,事實(shí)上,確實(shí)不難。但如果你要是沒(méi)真正處理過(guò)的話,可能一時(shí)還真會(huì)壁。比如:功能點(diǎn)1,將本地時(shí)間轉(zhuǎn)成格林威治時(shí)間。因?yàn)槲覀兏静恢牢覀儺?dāng)前的本地時(shí)間與標(biāo)準(zhǔn)時(shí)間的時(shí)差到底是多少。所以你要怎么轉(zhuǎn)??(我們不能單純地認(rèn)為,我們是中國(guó)人,所以時(shí)差都是8個(gè)小時(shí)。那如果你的游戲要是發(fā)布到世界其他國(guó)家了??那時(shí)差就完全不同。甚至就算是中國(guó),你在上海,跟在西藏,那時(shí)間也是有差別的。因此,我們需要根據(jù)本地時(shí)刻值,精確地計(jì)算出與標(biāo)準(zhǔn)時(shí)間的時(shí)差。從而才可以準(zhǔn)確轉(zhuǎn)換成格林威治時(shí)間。看下面處理方法:
            a) 將格林威治時(shí)間轉(zhuǎn)成標(biāo)準(zhǔn)時(shí)間
             ptime CommonHelper::utcToLocal(ptime utctime)
             {
              return boost::date_time::c_local_adjustor<ptime>::utc_to_local(utctime);
              //說(shuō)明:c_local_adjustor對(duì)象的utc_to_local()接口就是用來(lái)處理本地時(shí)間跟標(biāo)準(zhǔn)時(shí)間的偏差的。
              //此處所謂的本地時(shí)間,并不是固定指說(shuō)北京時(shí)間。而是你的計(jì)算處在地球的哪條經(jīng)線上,該經(jīng)線
              //跟格林威治所處的經(jīng)線的時(shí)差量。(我剛看到這個(gè)功能時(shí),實(shí)在太讓我驚訝了都!)

              //但是有一點(diǎn)需要注意:boost中,只提供了標(biāo)準(zhǔn)時(shí)間轉(zhuǎn)本地時(shí)間的上述接口,卻沒(méi)有
              //直接提供將本地時(shí)間轉(zhuǎn)成標(biāo)準(zhǔn)時(shí)間的接口。不過(guò),既然有了utc_to_loca()這樣的神兵利器
              //我們同樣可以很方便地處理將本地時(shí)間轉(zhuǎn)成標(biāo)準(zhǔn)時(shí)間的問(wèn)題。見(jiàn)如何:
             }

            b) 將本地時(shí)間轉(zhuǎn)成格林威治時(shí)間
            ptime CommonHelper::localToUtc(ptime ltime)
             {
              return ltime - (utcToLocal(epoch) - epoch);
              //說(shuō)明:(utcToLocal(epoch) - epoch)這部分內(nèi)容您的計(jì)算機(jī)的當(dāng)?shù)貢r(shí)差量(如果是在北京,那就是8小時(shí))
             }

            接下來(lái)介紹一下第二部分的功能點(diǎn)。即:功能點(diǎn)2:將時(shí)間轉(zhuǎn)時(shí)間戳以及將時(shí)間戳轉(zhuǎn)時(shí)間
            c) 將boost中的時(shí)間轉(zhuǎn)成時(shí)間戳,其實(shí)很簡(jiǎn)單。中需要做如下處理即可。(在此就不多說(shuō))
             WE::int64 CommonHelper::getUTCTimestamp()
             {  
              return (microsec_clock::universal_time() - epoch).total_milliseconds();
             }

            d) 此處重點(diǎn)介紹一下,如何將時(shí)間戳轉(zhuǎn)成時(shí)間。這個(gè)確實(shí)有點(diǎn)令人頭痛。為什么這么說(shuō)?因?yàn)闀r(shí)間戳,其實(shí)只是一個(gè)
            數(shù)量值。這個(gè)數(shù)量值記載的信息的意義是指:自:1970-1-1到指定時(shí)刻所走過(guò)的時(shí)間量值。如此,或許有人就會(huì)說(shuō),
            既然你都說(shuō)了,是從1970到指定時(shí)刻的量值,兩個(gè)時(shí)間相加不就好了。確實(shí)是這樣子的,但有個(gè)小問(wèn)題是:因?yàn)槲覀?br />沒(méi)法清楚這個(gè)量值的單位是什么。如果單位是:毫秒,而你把它當(dāng)成秒或當(dāng)成微秒來(lái)處理,結(jié)果都將是錯(cuò)的。關(guān)于這點(diǎn),
            其實(shí)boost有個(gè)時(shí)間處理的決策“的開(kāi)關(guān)”,這個(gè)似乎還要看自己編譯的boost的lib是使用到哪個(gè)精度的級(jí)別。關(guān)于這塊
            本人暫時(shí)還沒(méi)深入到這方面,所以也不敢妄言。不過(guò),有個(gè)接口,大家可以參考著使用下。time_duration::resolution()
            這個(gè)就可以用來(lái)識(shí)別,當(dāng)前系統(tǒng)中boost在時(shí)間這方面使用到的精度值。(例如本人目前項(xiàng)目中,使用到的是微秒級(jí)別的。
            所以返回值為:micro。)
            下面給他幾種實(shí)現(xiàn)時(shí)間戳轉(zhuǎn)時(shí)間的小例子:(以下假定,時(shí)間戳的單位為毫秒)
            e) 通過(guò)接口:from_time_t();
            ptime time_5 = from_time_t(timestamp);
            f) 通過(guò)time_duration
            milliseconds xx(time_1_stamp);
            ptime xxxxxxxxxxxx = CommonHelper::epoch + xx;
            g) 直接通過(guò)手動(dòng)計(jì)算。此方法實(shí)現(xiàn)思路很簡(jiǎn)單,但操作起來(lái)個(gè)人感覺(jué)易錯(cuò)。寫的代碼量又多,所以本人還是建議使用上面兩種,特別是第2種
            假如:timestamp是時(shí)間戳。則先計(jì)算出它的小時(shí),再計(jì)算出它的分鐘,計(jì)算出它的秒數(shù),最后計(jì)算出它的毫秒數(shù)。然后與commonhelper::epoch相加即可。
            注意:上面的e) f) g) 其實(shí)還是有區(qū)別的。用e)跟f)轉(zhuǎn)出來(lái)的精度值方面會(huì)不中方法g)。但在項(xiàng)目使用中,前兩者計(jì)算出來(lái)的精度值,一般
            情況下,是絕對(duì)可夠的。這是一個(gè)注意點(diǎn),給大家提醒一下。

            好了,這篇文章暫時(shí)就先寫到這吧。。其實(shí)關(guān)于boost時(shí)間,還有非常多的內(nèi)容可以挖掘,改天有機(jī)會(huì)再寫吧。希望對(duì)大伙有幫助。
            如果有錯(cuò)誤之處,還請(qǐng)指教。:)
            posted on 2013-01-02 16:27 Jacc.Kim 閱讀(3015) 評(píng)論(0)  編輯 收藏 引用 所屬分類: VC / C++
            69久久夜色精品国产69| 久久99九九国产免费看小说| 伊人久久大香线蕉av一区| 久久久午夜精品福利内容| 狠狠色噜噜色狠狠狠综合久久| 久久综合色之久久综合| 亚洲精品乱码久久久久久蜜桃不卡 | 国产成人精品久久综合| 久久影院久久香蕉国产线看观看| 成人午夜精品无码区久久| 国产精品久久亚洲不卡动漫| 久久影视综合亚洲| 日韩精品久久久久久久电影蜜臀| 久久精品国产一区二区| 国产成人久久精品激情| 香蕉久久夜色精品国产尤物| 精品综合久久久久久97超人| 伊人色综合久久天天人手人婷 | 狠狠综合久久综合88亚洲| 99久久免费国产特黄| 国内精品久久久久影院薰衣草 | 亚洲午夜久久久久久久久电影网| 精品久久久久久无码人妻热| 欧洲人妻丰满av无码久久不卡| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产精品欧美久久久天天影视| 亚洲日韩欧美一区久久久久我 | 精品综合久久久久久888蜜芽| 久久国产乱子伦精品免费午夜| 国产精品久久毛片完整版| 久久精品aⅴ无码中文字字幕不卡| 一本综合久久国产二区| 久久久久这里只有精品 | 日产久久强奸免费的看| 国内精品久久久久久野外| 久久久久久精品免费免费自慰| 色婷婷噜噜久久国产精品12p | 国产精品久久久亚洲| 久久精品无码一区二区WWW| 一本久道久久综合狠狠躁AV| 免费精品久久久久久中文字幕 |