使用python實現一個日期和時間戳互轉的Alfred workflow

xindoo發表於2022-02-21

前兩天換了新款的macbook,也不知道是不是因為m1晶片的原因,系統沒有自帶php,導致我之前使用的時間戳轉換workflow失效了。作為一個後端工程師,時間戳互轉的功能還是非常常用了,於是還折騰修復了下,手動安裝php後可能是因為php版本的原因,依舊無法使用,心想還是算了 不折騰了,原來那個也不是很好用,乾脆自己用python寫一個。

先說下我這個workflow實現的幾個功能:

  1. 可以獲取當前的時間,支援獲取秒級時間戳,毫秒級時間戳,以及yyyy-MM-ddyyyy-MM-dd HH:mm:ss的日期格式。
    在這裡插入圖片描述
  2. 可以將秒級或者毫秒級的時間戳轉為yyyy-MM-ddyyyy-MM-dd HH:mm:ss的日期格式。在這裡插入圖片描述
  3. 當然也可以將yyyy-MM-ddyyyy-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

相關文章