前兩天換了新款的macbook,也不知道是不是因為m1晶片的原因,系統沒有自帶php,導致我之前使用的時間戳轉換workflow失效了。作為一個後端工程師,時間戳互轉的功能還是非常常用了,於是還折騰修復了下,手動安裝php後可能是因為php版本的原因,依舊無法使用,心想還是算了 不折騰了,原來那個也不是很好用,乾脆自己用python寫一個。
先說下我這個workflow實現的幾個功能:
- 可以獲取當前的時間,支援獲取秒級時間戳,毫秒級時間戳,以及
yyyy-MM-dd
和yyyy-MM-dd HH:mm:ss
的日期格式。 - 可以將秒級或者毫秒級的時間戳轉為
yyyy-MM-dd
和yyyy-MM-dd HH:mm:ss
的日期格式。 - 當然也可以將
yyyy-MM-dd
和yyyy-MM-dd HH:mm:ss
格式的日期轉為秒級和毫秒級的時間戳。
下文將很具體的教授大家如何實現上述功能,相信以大家的學習能力,很快也能寫出其他。如果不想寫,文末附上了下載連結,你可以直接拿去使用。
我們首先來看下Alfred workflow所要求的輸出資料格式,使用json或者xml都可以,其中title和subtitle欄位用做展示,我這裡只使用了title欄位。arg欄位是用來像下一級的workflow傳遞引數的,如果你的workflow單純是為了展示,可以不需要這個。我這裡經常需要將結果複製到貼上板中,所以在後面接了一個Copy to clipboard模組,所以arg引數就是必要的了。
{
"items": [
{
"arg": 1645346653,
"valid": true,
"subtitle": "",
"uid": "s",
"title": "\u79d2: 1645346653"
},
{
"arg": "1645346653000",
"valid": true,
"subtitle": "",
"uid": "ms",
"title": "\u6beb\u79d2: 1645346653000"
},
{
"arg": "2022-02-20",
"valid": true,
"subtitle": "",
"uid": "date",
"title": "\u65e5\u671f: 2022-02-20"
},
{
"arg": "2022-02-20 16:44:13",
"valid": true,
"subtitle": "",
"uid": "datetime",
"title": "\u65f6\u95f4: 2022-02-20 16:44:13"
}
]
}
實際上,你用任何方式生成上面格式的json串,都可以用來實現一個新的workflow,不限於任何語言。 所以你可以看到alfred的workflow可以使用各種語言去寫。
關於時間戳轉化的workflow邏輯就很簡單了,就是根據入參生成各種格式的日期資料,然後將起以上文的json格式輸出,完整程式碼如下:
# -*- coding: utf-8 -*-
import sys
import time
import datetime
import re
from workflow import Workflow3
def getTime(ts):
wf = Workflow3()
s = ts
timeArray = time.localtime(ts)
# otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", ts)
ms = str(ts*1000)
wf.add_item(uid = "s", title = "秒: "+str(s), arg=s, valid = True)
wf.add_item(uid = "ms", title = "毫秒: "+str(ms), arg=ms, valid = True)
wf.add_item(uid = "date", title = "日期: "+time.strftime("%Y-%m-%d", timeArray), arg=time.strftime("%Y-%m-%d", timeArray), valid = True)
wf.add_item(uid = "datetime", title = "時間: "+time.strftime("%Y-%m-%d %H:%M:%S", timeArray), arg=time.strftime("%Y-%m-%d %H:%M:%S", timeArray), valid = True)
wf.send_feedback()
if __name__ == '__main__':
if len(sys.argv) == 1:
ts = time.time()
getTime(int(ts))
exit(0)
query = sys.argv[1]
# print(query)
if query == 'now':
ts = time.time()
getTime(int(ts))
elif re.match(r"\d+-\d+-\d+ \d+:\d+:\d+", query):
ts = time.mktime(time.strptime(query, '%Y-%m-%d %H:%M:%S'))
getTime(int(ts))
elif re.match(r"\d+-\d+-\d+", query):
ts = time.mktime(time.strptime(query, '%Y-%m-%d'))
getTime(int(ts))
elif re.match(r"\d+", query):
ts = int(query)
if ts > 253402185600:
ts = ts/1000
getTime(ts)
在Alfred的配置如下:
最後附上Workflow的下載連結: https://pan.baidu.com/s/1PVS9XvKe-2fle2ZrreCWPA?pwd=ukd8 提取碼: ukd8