知識
不管是網站,軟件還是小程序,都要直接或間接能為您產生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站成為營銷工具,讓軟件能切實提升企業(yè)內部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
程序中的時間問題
發(fā)表時間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數:46
知識的盲區(qū)往往會影響到程序編程。對于只有錘子的人來說,所有問題都是釘子。
緣由:
前不久,一個做前端的同事聯系我,他說一個時間控件接收到后端的數據后,顯示時總是少了8個小時,他想用網上的個工具類,對時間進行加8的運算,以達到理想效果。
我以前,在一大廠里擼代碼,發(fā)現所有跟時間格式化相關的,都會減8操作后,再格式化,而且注釋說明了:轉成utc時間(都已經知道UTC時間了,還這樣搞)。
計算機的時間其實是一個長整型數,專業(yè)一點的術語叫時間戳,不同國家,或者不同地點,對同一時間的表示確不同,我現在的當前時間是:10:17,但在美國可能是12點,但時間戳都是一樣的。我曾去西藏阿里,發(fā)現手機上的時間我別人手機相差了幾個小時,原來是我設制自動適應時區(qū)。
個人pc上也可以手動設置時區(qū):
Linux系統有一個專門的文件存儲當前本地化的信息。
有了以上知識,解決方案就有了。
1.在代碼中設置時區(qū)
在用SimpleDateFormat格式化日期時,用以下構造函數:
public SimpleDateFormat(String pattern, Locale locale)
Locale 代表了地域信息.
優(yōu)點:簡單易用,在代碼中寫死,不用管運維怎么設制環(huán)境。
缺點:不利于國際化,要重復寫代碼,且以后不容易改動
2.設置jre運時環(huán)境的時區(qū)
在啟動jar時,跟 上參數 “-Duser.timezone=GMT+8" ,GMT代表的是格林威冶,加8代表了東八區(qū)時間。
優(yōu)點:方便全局設置,方便國際化。
缺點:要修改tomcat或其它中間件的啟動參數。(這算個屁,改就改唄)
3.設置系統時區(qū)
可以修改Linux系統中的區(qū)域文件:/etc/timezone
優(yōu)點:終極解決方案,一改全部改
缺點:終極解決方案,一改全部改,等等,我有個jar包里面全部用了+8的操作?!?/p>
3.根據http協議中自帶的信息設置時區(qū)
http協議標準中,http 請求頭中的Accept-Language 表示語言信息如:
-H "Accept-Language: zh-CN,zh;q=0.9" ^
配置合spring 中的LocalResolve與i8s可以做到國際化,(當然也包括時間)
優(yōu)點:實現國際化,什么時候時區(qū)由用戶瀏覽器決定。
缺點:實現麻煩
4.docker容器中的方案
docker容器中的時區(qū)信息往往與系統的不一致,
方案一: 在制作鏡像時替換掉鏡像中的/etc/timezone,
方案二:在容器編排時將容器中的/etc/timezone映射成系統的/etc/timezone,
最后:那個前端問題
我查看了那個日期控件的文檔,發(fā)現有設置區(qū)域信息的地方,解決!
我面試過很多人,也被很多人面試過,現在做java似乎都偏向于高層,網上動不動就是掉打阿里p8級架構師的課程。我真的不知道這是好事還是壞事。高并發(fā),中間件等等,了解的人真的很多,有時面試時,就是在背答案,或有時聊源代碼,但說到怎么擴展一個框架,就沒有人知道了。公司里真的需要這樣的程序員,或這樣的高級架構角色嗎?
如果是我,我寧可看重這些小事。我不信一行簡單的代碼都寫不好,一個簡單的算法都不知道,一個jse中的api都用不好,還有什么理由說那些高級東西呢。