開發乙個時間小程式

2022-07-24 04:48:17 字數 2089 閱讀 9507

為什麼不自己動手量身打造乙個呢?

行動起來。

很簡單:

需要展示時間的城市初定:加州、紐約,再加北京做對比

需要顯示具體的時分秒,和年月日

需要實時變化

在其他國家也能正確展示時間

這個小程式的核心是時間的處理。如何得到其他地區的時刻資訊?

這還不簡單?

先獲取本地時刻,然後加上或者減去另外乙個地點與國內(北京時間)的時差(小時),最多再處理一下跨天的情況,不就得到其他地點的時刻了?

我一開始也是這麼想的,做完覺得還挺美,準備提交的時候,突然意識到問題:我時差全是基於北京時間計算的,換在其他國家訪問,獲取的本地時間已經不是北京時間了,時差應該變才對,寫死了時差可還行?!發布乙個只能在國內使用的雞肋時間工具,可不是我的風格!

搗鼓一陣,新方案出爐:

想辦法獲得零時區的時間

獲取不同地區與零時區的時差(時區)

用零時區的時間加減與零時區的時差(時區),得到各地的絕對時間

1. 獲得零時區的時間

零時區,也叫中時區,位於英國格林威治本初子午線上。該時區的地方時,叫做格林威治時間,也叫世界時。

我們不能直接獲得格林威治時間,但是我們可以獲得本地與格林威治的時間差:

const diff = new date().gettimezoneoffset() // 單位為分鐘
const abstime = new date().gettime() + diff * 60 * 1000;
2. 查詢各地時區

格林威治本初子午線將地球劃分為東西兩個半球,格林威治本初子午線為零時區,往西依次為西一區到西十一區,往東依次為東一區到東十一區,西十二區和東十二區重合成為東西十二區,一共劃分了24個時區,每個時區相差正好是1個小時。

北京是東八區,紐約是西五區,加州是西八區。

完整時區地圖:

3. 計算各地的絕對時間

東時區的時刻比零時區快,西時區的時刻比零時區慢,所以東時區為正,西時區為負,所有時間計算記得轉換為毫秒。

let localtime = new date(abstime + timezone * 60 * 60 * 1000);
獲取任何時區的絕對時間的完整核心**:

/**

* timezone: 東n區為正,西n區為負, 單位為小時

*/const getfulltimeinfo = (timezone, country, spliter) => ;

}

很快,第一版就完成了。

剛開始這個樣子略醜,有點裸奔的趕腳。不過第一版最主要是核心功能,簡陋的介面只是暫時的。

用了一陣子,覺得樣式啥的還是得豐富豐富,於是花了一些時間做了一次改版,實時時間以時鐘效果展示,並且修改了布局,順便重構了一下**,便於新增地區。

嗯,效果似乎還行~

前幾天跟澳洲的朋友聊天,聊著聊著居然發現了我的程式的乙個潛在bug。

那天是4月4日的早晨(北京時間),我跟朋友吐槽我的乙個疑惑:查詢雪梨時區為東十區(即與北京相差2小時),但是為啥查詢雪梨時間卻與北京相差3小時(所以我當時程式中是把雪梨作為東十一區來計算的)。朋友說:是的沒錯,我們這裡現在在使用夏令時,等夏令時結束就恢復2個小時時差了。然後一查,今年澳洲夏令時將在4月5號凌晨3點結束。。。

也就是說,距離這個bug發作還有不到一天的時間。。。

馬上開啟電腦,改bug。。。

根據資料,獲得美國和澳大利亞的夏令時規則:

關於夏令時,也挺有意思,有空我會另開乙個篇幅來專門講述。

將夏令時的判斷邏輯加上:

/**

* timezone: 東n區為正,西n區為負, 單位為小時

*/const getfulltimeinfo = (timezone, country, spliter) =>

return ;

}

有了現在的版本:

以後對這個小工具我還會不斷優化,會越來越靈活,比如支援地區選擇,這樣每個人都可以定製自己的時差表了。可以期待一下哦~

--還是毛爺爺說得好:自己動手豐衣足食。

C 封裝乙個時間庫

h檔案是這樣的 pragma once include include int dayoftheweek int nyear,int nmonth,int nday 等待時間超時 int waittimeout unsigned int nmilliseconds class cmylocaltim...

關於乙個時間補充的問題

乙個困擾了我兩天的問題,別人乙個小時就搞定了,究其原因是什麼呢,其實就是乙個函式我不知道,但是那個函式真的很常用。問題 一組資料,其中有時間和對應的專案名稱,根據日期進行統計,將沒有資料的對應日期顯示在使用者前端,統計數目記為0?解決此問題的邏輯 使用php在後端解決比使用mysql在sql語句中解...

乙個時間複雜度問題

有乙個字串陣列,將陣列中的每乙個字串按照字母序排序 之後再將整個字串陣列按照字典序排序。整個操作的時間複雜度是多少?假設最長的字串長度為 s 為什麼要假設最長字串呢?因為通常求的時間複雜度是上界,所以我們假象這個字串陣列中所有字串的長度都是最長的 s 這樣計算得出來的時間複雜度就是上界,包含了最壞的...