• <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++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(1)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            此篇文章打算介紹兩個,在平時工作中,使用頻繁并且十分有價值的功能。(因為你的項目不用到還好,只要用到,下面這兩個一般是必不可少)
            功能點1:將本地時間轉成格林威治時間,或者是將格林威治時間轉成本地時間。
            功能點2:將時間轉成時間戳,以及如何將時間戳轉成時間。
            有些人可看剛看到上面的功能點概述,可能會覺得這沒什么難的。也的確,事實上,確實不難。但如果你要是沒真正處理過的話,可能一時還真會壁。比如:功能點1,將本地時間轉成格林威治時間。因為我們根本不知道我們當前的本地時間與標準時間的時差到底是多少。所以你要怎么轉??(我們不能單純地認為,我們是中國人,所以時差都是8個小時。那如果你的游戲要是發布到世界其他國家了??那時差就完全不同。甚至就算是中國,你在上海,跟在西藏,那時間也是有差別的。因此,我們需要根據本地時刻值,精確地計算出與標準時間的時差。從而才可以準確轉換成格林威治時間。看下面處理方法:
            a) 將格林威治時間轉成標準時間
             ptime CommonHelper::utcToLocal(ptime utctime)
             {
              return boost::date_time::c_local_adjustor<ptime>::utc_to_local(utctime);
              //說明:c_local_adjustor對象的utc_to_local()接口就是用來處理本地時間跟標準時間的偏差的。
              //此處所謂的本地時間,并不是固定指說北京時間。而是你的計算處在地球的哪條經線上,該經線
              //跟格林威治所處的經線的時差量。(我剛看到這個功能時,實在太讓我驚訝了都!)

              //但是有一點需要注意:boost中,只提供了標準時間轉本地時間的上述接口,卻沒有
              //直接提供將本地時間轉成標準時間的接口。不過,既然有了utc_to_loca()這樣的神兵利器
              //我們同樣可以很方便地處理將本地時間轉成標準時間的問題。見如何:
             }

            b) 將本地時間轉成格林威治時間
            ptime CommonHelper::localToUtc(ptime ltime)
             {
              return ltime - (utcToLocal(epoch) - epoch);
              //說明:(utcToLocal(epoch) - epoch)這部分內容您的計算機的當地時差量(如果是在北京,那就是8小時)
             }

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

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

            好了,這篇文章暫時就先寫到這吧。。其實關于boost時間,還有非常多的內容可以挖掘,改天有機會再寫吧。希望對大伙有幫助。
            如果有錯誤之處,還請指教。:)
            posted on 2013-01-02 16:27 Jacc.Kim 閱讀(3013) 評論(0)  編輯 收藏 引用 所屬分類: VC / C++
            国产精品热久久毛片| 久久国产免费观看精品3| Xx性欧美肥妇精品久久久久久| 亚洲人成精品久久久久| 国内精品久久久久影院亚洲| 久久久久亚洲AV无码专区网站| 中文字幕亚洲综合久久2| 狠狠狠色丁香婷婷综合久久五月| 无码人妻精品一区二区三区久久| 思思久久精品在热线热| 人妻系列无码专区久久五月天| 精品久久久久久国产免费了| 四虎国产精品免费久久5151| 久久久国产精品福利免费| 久久99精品国产自在现线小黄鸭 | 一本一本久久a久久综合精品蜜桃| 久久影院亚洲一区| 久久亚洲国产精品123区| 亚洲精品成人网久久久久久| 亚洲国产成人精品无码久久久久久综合| 久久精品国产99久久香蕉| 亚洲?V乱码久久精品蜜桃 | 88久久精品无码一区二区毛片| 久久精品国产精品亚洲精品| 一本伊大人香蕉久久网手机| 国产女人aaa级久久久级| 久久久无码精品午夜| 一本久久精品一区二区| 中文字幕热久久久久久久| 人妻少妇久久中文字幕一区二区| 国产精品99久久免费观看| 91精品国产综合久久香蕉| 久久精品国产亚洲Aⅴ蜜臀色欲| 四虎亚洲国产成人久久精品| 久久久久久精品久久久久| 久久天堂AV综合合色蜜桃网| 精品久久久久久国产| 久久久久久亚洲精品无码| 久久精品国产亚洲AV不卡| 国产精品久久网| 一个色综合久久|