編程

舊金山灣區時間與北京時間轉換,用Javascript方便地實現時區轉換例子

在當今這個服務全球化時代,時區轉換是使用各種編程語言時經常遇到的問題。之前的這篇文章講了Python實現時間在不同時區的換算,本文講一下怎樣用Javascript實現。多虧了moment.js這個庫,時區轉換實現非常直觀方便,比Python的pytz好用點。Google出來排名前幾名的文章感覺並不滿意,所以在這總結分享一下,以便需要的時候很容易找到end to end能工作的例子。 從上面例子可以看到,真的非常簡單,基本就是一個moment對象調用tz函數,參數為新時區的名字,就生成了表示新時區時間一個新的moment。可以用format打印出來來驗證其準確性。 在Chrome瀏覽器驗證 Javascript的好處就是有個瀏覽器就可以跑,不需要設置什麼環境。驗證上面代碼可以打開moment.js的官網,打開developer tool的console, 注意,一定要在這個網站下打開developer tools,這樣moment會在瀏覽器環境里,在其他網站下打開會找不到moment。 運行上面代碼如下 已知灣區時間(-0700)比北京時間(0800)晚15小時,所以上面結果是正確的。moment(sftime)是創建一個copy,如果用sftime.tz(‘Asia/Shanghai’)就會改變sftime這個對象本身的內容,而我們想新建一個bjtime的對象存放北京時間。 建立一個HTML文件來運行代碼 如果需要在本地建立一個HTML,可以把moment.js和moment-timezone-with-data.js下載下來,放在和將要創建的test_moment.html文件放一起。編輯test_moment.html如下: 在Chrome打開test_moment.html可以看到空白頁面。打開developer -> Javascript Console可以看到結果

舊金山灣區時間與北京時間轉換,用python實現時區轉換例子

San Francisco Time ?? Beijing Time ?? 把一個時區的時間,比如灣區9:00am,轉換成另一個時區的時間,比如北京/香港/新加坡時間,應該是很簡單的問題。用Python做時區轉換好像挺麻煩的,容易出錯。Google出來的前幾條結果都不是很讓人滿意,本文總結我測試過可靠可行不太複雜的方法,以及一些容易出錯的地方。 先上可行的Python例子,把三藩(SF)灣區時間9am, 轉換成對應的北京時間,用了datetime和pytz。先構造一個灣區時間的對象,然後轉化成北京/香港/新加坡時間。 加上註解和debug信息。 可以看到建立的灣區時間時區為-0700而北京時間為0800,可以驗證灣區和中國時差為15小時。 時區行話解釋 全球標準時間用的是位於英國的格林威治時間(GMT, Greenwich Mean Time)。因為以前格林威治天文台是世界中心,本初子午線或者0度經線就定義為穿過它的經線。然後又有了一個叫世界協調時間的東西(UTC, Coordinated Universal Time)。這個和GMT基本一致,大概就是北京話和普通話的區別吧。北京在Greenwich的東邊,時間領先GMT/UTC 8小時,所以叫東八區,代號0800。而灣區在格林威治的西邊,時間滯後7個小時(美國國會通過了永久使用夏令時法案),所以叫西7區,代號-0700。而兩地時差為7+9=15,北京時間比灣區時間領先15個小時。 同理,日本和韓國位於東9區,代號為0900,那麼時間就比為與東八區的中國早1小時。 當地真實時間和約定標準時間 一個地方的真實時間只取決於太陽相對當地的位置,也就是取決於當地經度。但是為了方便,每個國家可以人為規定用什麼時間。比如整個中國雖然跨了幾個緯度,確人為規定了各地都使用北京時間。新加坡真實時間應該為0655,確規定使用0800,也許是和大中華區保持一致比較方便。 回到Python上,這也正是pytz包的一些坑的來源。pytz用的是地理意義上的真實時間,而人們真正使用的是當地法律約定的時間,這兩者是有差別的。 Python datetime不設時區是什麼時間? 如果新建一個datetime對象,不設時區的話,會是當地時間。 用epochconverter轉換1656658800.0,正是灣區時間2022-07-01 00:00:00 如果replace了timezone,就把底下的timestamp變了,而不是保持timestamp而改變時間表示形式(日期,小時/分/秒)。所以replace(tzinfo=…)並不是做時區變換。而且注意下面例子里上海時間是0806,並不是0800,應該用了地理意義上的真實時間而不是法定時間。這個地理時間在生活中基本沒用,這個pytz的坑之一。 參考 Python3中datetime時區轉換介紹與踩坑 python datetime時區轉換 技巧:用datetime模塊處理時區轉換,不要用time模塊 將UTC、EST時區的時間轉化成北京時間(python) pytz庫時區的坑(轉) The Solution…
Read more

Python Pathlib生存手冊,幾個短例子極速上手

Pathlib是Python里自帶的處理OS路徑的library,功能非常強大,可以代替原來的os.path。本文提供幾個簡單的例子供查詢,幫您極速上手,引用到自己的python project里。 創建操作Path對象例子 可以用」/「直接得到下一層目錄或文件的Path對象 Home Path對象例子 需要注意的是,Path constructor的參數不認識~。需要用Path.home()。 驗證tilda不work 驗證Path.home() work 當前目錄例子 如果需要當前目錄的對象可以用cwd函數或者.加resolve函數 遍歷文件夾例子 也就是implement bash命令 用pathlib實現如下 外面函數python_find接受path string,裏面的遞歸函數_python_find接受pathlib.Path object。用iterdir列出當前input path下的所有對象,先打印它們的路徑,如果是目錄,就繼續調用遞歸函數_python_find打印下一層目錄裏面的內容。 Pathlib刪除文件例子 刪除文件 刪除目錄/文件夾 rmdir只能刪除空的文件夾/目錄,如果內部還有其他文件或目錄會報錯。 刪除非空目錄/文件夾 這個只能自己用上面兩個函數用遞歸實現。這裡我增加了顯示被刪除文件size的信息。 參考 一分鐘學一個 Python 標準庫之 Pathlib PathLib recursively remove directory? pathlib — Object-oriented filesystem paths…
Read more

CSS 格子layout例子

1 2 3 4 5 6 7 CSS代碼 HTML代碼 padding是div內部內容和div格子上下左右邊界的距離 display: grid 決定了內部div (“inner” class)從左到右排練,如果不用,每個div各佔一行 grid-template-columns 決定了一行放幾個內部div,和每個內部div寬度,可以是%也可以絕對距離 boarder用來debug,顯示格子邊界大小 用鼠標選中格子里兩行,cmd+c,cmd+v 複製黏貼到編輯器里,出了還是一個一行,打橫顯示是瀏覽器的特效。

修復 wordpress 中文繁簡轉換插件的問題

給網站添加了WP Chinese Conversion,可以進行簡體繁體轉換了。 目前這個WP Chinese Conversion插件的版本是1.1.16,已經5年沒更新了。PHP升級後有了些變化,於是這個插件就有了些error/warning。自己動手將就改了一下,修改都在wp-chinese-conversion.php,把error/warning fixed了。本文記錄一下。 each function被新版PHP給deprecated了 把這用到each的代碼,比如這個 改成 create_function也被PHP給deprecated了 把用到create_function的地方改成anonymous function,比如這段 改成 總結 修改這兩function用到的地方後,就正常工作了。

PHP隨手筆記 array和hashtable,打印,REPL,While Loop

自己運營wordpress網站,而wordpress是用PHP開發的,遇到問題就看看代碼,所以時不時也得學點PHP,記點筆記。 PHP的array也是hashtable array的index是從0開始的連續的數字,而hashtable的index是任意東西。邏輯上確實可以用hashtable實現array。但是物理上一般array內存空間是連續的,不知道PHP怎麼實現。以後可以看看。 打印 print_r($some_object)可以打印object,而echo $some_string只能打印string REPL 本地 online可以用replit.com。我的本地版本是8,需要用7,測試一個叫each的function,8已經淘汰掉這個function了。目前replit還是7,可以測試。 While Loop例子

怎樣備份部署在EC2上的WordPress站點

手動備份 備份網頁部分(html, php),這部分不需要經常備份,如果沒修改code或者更新plug,主題之類的 備份MySQL,這部分需要更頻繁,所有的內容都在database里 sudo mysqldump -u <db user> -p –databases <db1> [db2, db3…] > <db backup filename>.sql 然後可以sftp複製到本地或者上傳到s3之類的cloud storage里。 備份Script 編輯 backup_db.sh 文件如下 編輯 backup_html.sh 文件如下 以後需要backup的時候運行這兩文件即可

算法練習 Leetcode 力扣 1293 Shortest Path in a Grid with Obstacles Elimination 解法

問題 題目在這。 解題思路 格子題,從左上到右下需要的最小步數。難點在給了個預算k,最多可以穿牆k次。找距離需要用BFS,不走回頭路就可以,比較簡單。但是這題在空間上是有可能走回頭路的,因為除了空間以外,還多了個狀態是已經穿牆幾次。放到queue裏面的應該是(坐標,穿牆次數)的tuple。所以關鍵在於不要把相同(坐標,穿牆次數)放queue里,不然會無法停止。 Python解法

關於Mac OS Monterey上的Apache/httpd的筆記

路徑,可以用which httpd確定 版本 重啟httpd, 加-k會有更多信息。比如PHP需要code sign,不加就不告訴你 在Monterey里,加載PHP需要code sign。可以參考這篇文章。 如果PHP版本更新了,比如用了brew update,那麼需要對新版本的libphp 進行 code sign。 如果Mac電腦重啟了,也需要codesign,比如 需要根據php安裝改變上面libphp.so的路徑。有時Mac上面用brew安裝的php升級了,也需要修改上面的<php version>。 查找apache2 config 裏面用的libphp.so地址 在Mac OS里,apache2 conf的可能路徑是/etc/apache2/httpd.conf,可以用sudo權限編輯 Document root路徑 Config file (配置文件)路徑 log (日誌)路徑 本文鏈接