[Python3] 將其他時區(qū)時間轉(zhuǎn)換為北京時間

參考鏈接:https://www.cnblogs.com/yingsong/p/5613735.html

Python3.7

第三方模塊支持: pip install python-dateutil
要轉(zhuǎn)換的格式:Wed Apr 08 23:44:57 2015 -0500 or 2017-07-31 20:18:00 +0530
目標格式是:2017-07-31 20:18:00

import requests

from bs4 import BeautifulSoup
from dateutil.parser import parse
from src.lib.proxypool import proxies, headers


def calc_mon(tm_year, tm_mon):
    if tm_mon > 12:
        new_tm_year = tm_year + 1
        new_tm_mon = tm_mon - 12
        return new_tm_year, new_tm_mon
    else:
        return tm_year, tm_mon


def calc_day(tm_mon, tm_mday):
    """
    計算每個月有多少天滚朵,是否大于規(guī)定的31或者30乒验,若大于則月份加1
    :param tm_mon:
    :param tm_mday:
    :return:
    """
    if tm_mon in [1, 3, 5, 7, 8, 10, 12]:
        if tm_mday > 31:
            new_tm_mon = tm_mon + 1
            new_tm_mday = tm_mday - 31
            return new_tm_mon, new_tm_mday
        else:
            return tm_mon, tm_mday
    elif tm_mon in [2, 4, 6, 9, 11]:
        if tm_mday > 30:
            new_tm_mon = tm_mon + 1
            new_tm_mday = tm_mday - 30
            return new_tm_mon, new_tm_mday
        else:
            return tm_mon, tm_mday


def calc_hour(tm_mday, tm_hour, diff_hour):
    tm_hour = tm_hour + diff_hour  # 轉(zhuǎn)換成北京時區(qū)
    if tm_hour >= 24:
        new_tm_mday = tm_mday + 1
        new_tm_hour = tm_hour - 24
        return new_tm_mday, new_tm_hour
    else:
        return tm_mday, tm_hour


def calc_min(tm_hour, tm_min, diff_min):
    if tm_min + diff_min >= 60:
        new_tm_hour = tm_hour + 1
        new_tm_min = (tm_min + diff_min) - 60
        return new_tm_hour, new_tm_min
    else:
        new_tm_min = tm_min + diff_min
        return tm_hour, new_tm_min


def analysis_conditions(utc_diff):
    if "-" in utc_diff:
        utc_diff_time = utc_diff.strip("-")
        # print(utc_diff_time[:2], utc_diff_time[2:])
        diff_hour = int(utc_diff_time[:2])
        diff_min = int(utc_diff_time[2:])
        return diff_hour + 8, diff_min
    else:
        bj_utc_hour = int("0800"[:2])
        bj_utc_min = int("0800"[2:])
        utc_diff_time = utc_diff.strip("+")
        utc_diff_hour = int(utc_diff_time.strip("+")[:2])
        utc_diff_min = int(utc_diff_time.strip("+")[2:])
        # print(bj_utc_time, utc_diff_time)
        if bj_utc_hour > utc_diff_hour:
            diff_min = bj_utc_min - utc_diff_min
            diff_hour = bj_utc_hour - utc_diff_hour
            if '-' in str(diff_min):
                # print("diff_min ", int(str(diff_min).strip('-')))

                # print(diff_hour, diff_min)
                return diff_hour - 1, int(str(diff_min).strip('-'))
            else:
                return diff_hour, diff_min
        else:
            diff_min = bj_utc_min - utc_diff_min
            diff_hour = bj_utc_hour - utc_diff_hour
            # print(diff_hour, diff_min)
            return diff_hour, diff_min


def to_beijing_time(str_time):
    struct_time = parse(str_time)
    utc_diff = str_time.split(" ")[-1]

    diff_hour, diff_min = analysis_conditions(utc_diff)
    # print(diff_hour, diff_min)

    new_tm_hour, new_tm_min = calc_min(struct_time.hour, struct_time.minute, diff_min)
    new_tm_mday, new_tm_hour = calc_hour(struct_time.day, new_tm_hour, diff_hour)
    new_tm_mon, new_tm_mday = calc_day(struct_time.month, new_tm_mday)
    new_tm_year, new_tm_mon = calc_mon(struct_time.year, new_tm_mon)
    if len(str(new_tm_hour)) == 1:
        tm_hour = "0" + str(new_tm_hour)
    else:
        tm_hour = str(new_tm_hour)
    if len(str(new_tm_min)) == 1:
        tm_min = "0" + str(new_tm_min)
    else:
        tm_min = str(new_tm_min)
    # print("Final time ", str(new_tm_year) + "-" + str(new_tm_mon) + "-" + str(
    #     new_tm_mday) + " " + tm_hour + ":" + tm_min + ":" + str(struct_time.second))
    return str(new_tm_year) + "-" + str(new_tm_mon) + "-" + str(
        new_tm_mday) + " " + tm_hour + ":" + tm_min + ":" + str(struct_time.second)


def googlesource(url):
    """
    "https://android.googlesource.com/platform/frameworks/av/+/2434839bbd168469f80dd9a22f1328bc81046398"
    :param url:
    :return:
    """
    req = requests.get(url=url, proxies=proxies)
    soup = BeautifulSoup(req.text, 'lxml')
    # print(soup)
    title = soup.findAll(attrs={"class": "u-monospace Metadata"})

    try:
        report_time = title[0].findAll('td')[3].text
        fix_time = title[0].findAll('td')[5].text

        rt = to_beijing_time(report_time)
        ft = to_beijing_time(fix_time)
        # print("------googlesource-----", rt, ft)
        return rt, ft
    except:
        return "", ""


def codeaurora(url):
    """
    "https://source.codeaurora.org/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-2.0/commit/?id=71331327ac389bff7d5af2707c4325e5b7949013",
    :return:
    """
    req = requests.get(url=url, proxies=proxies)
    soup = BeautifulSoup(req.text, 'lxml')
    title = soup.findAll(attrs={"class": "right"})

    # print(title)

    try:
        report_time = title[2].text
        fix_time = title[3].text

        # print(report_time, fix_time)
        rt = to_beijing_time(report_time)
        ft = to_beijing_time(fix_time)

        # print("------codeaurora-----", rt, ft)
        return rt, ft
    except:
        return "", ""


# if __name__ == '__main__':
#     codeaurora()
#     googlesource()

def kernel(url):
    req = requests.get(url=url, headers=headers, proxies=proxies)
    soup = BeautifulSoup(req.text, 'lxml')
    # print(soup)
    title = soup.findAll(attrs={"class": "right"})
    # print(title[2].text)
    # print(title[3].text)

    try:
        report_time = title[2].text
        fix_time = title[3].text

        # print(report_time, fix_time)
        rt = to_beijing_time(report_time)
        ft = to_beijing_time(fix_time)
        # print("------kernel-----", rt, ft)
        return rt, ft
    except:
        return "", ""


def req_time(url):
    if "codeaurora" in url:
        rt, ft = codeaurora(url)
        return rt, ft
    elif "googlesource" in url:
        rt, ft = googlesource(url)
        return rt, ft
    elif "kernel" in url:
        rt, ft = kernel(url)
        return rt, ft

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柳骄,一起剝皮案震驚了整個濱河市会喝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劳坑,老刑警劉巖链韭,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缎玫,死亡現(xiàn)場離奇詭異,居然都是意外死亡膳灶,警方通過查閱死者的電腦和手機咱士,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門立由,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人序厉,你說我怎么就攤上這事锐膜。” “怎么了弛房?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵道盏,是天一觀的道長。 經(jīng)常有香客問我文捶,道長荷逞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任粹排,我火速辦了婚禮种远,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恨搓。我一直安慰自己院促,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布斧抱。 她就那樣靜靜地躺著常拓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辉浦。 梳的紋絲不亂的頭發(fā)上弄抬,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音宪郊,去河邊找鬼掂恕。 笑死,一個胖子當著我的面吹牛弛槐,可吹牛的內(nèi)容都是我干的懊亡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼乎串,長吁一口氣:“原來是場噩夢啊……” “哼店枣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叹誉,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤鸯两,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后长豁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钧唐,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年匠襟,在試婚紗的時候發(fā)現(xiàn)自己被綠了钝侠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片该园。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖帅韧,靈堂內(nèi)的尸體忽然破棺而出爬范,到底是詐尸還是另有隱情,我是刑警寧澤弱匪,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布青瀑,位于F島的核電站,受9級特大地震影響萧诫,放射性物質(zhì)發(fā)生泄漏斥难。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一帘饶、第九天 我趴在偏房一處隱蔽的房頂上張望哑诊。 院中可真熱鬧,春花似錦及刻、人聲如沸镀裤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暑劝。三九已至,卻和暖如春颗搂,著一層夾襖步出監(jiān)牢的瞬間担猛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工丢氢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留傅联,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓疚察,卻偏偏與公主長得像蒸走,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子貌嫡,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 2,963評論 1 3
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,444評論 6 428
  • 前些日子從@張鑫旭微博處得一份推薦(Front-end-tutorial)比驻,號稱最全的資源教程-前端涉及的所有知識...
    谷子多閱讀 4,175評論 0 44
  • 從頭開始配置編譯python3.6版本的caffe整整花了10天時間,期間經(jīng)歷了很多事,所以狀態(tài)一直很差,真正的配...
    horsetif閱讀 12,934評論 5 11
  • 雨依舊淅淅瀝瀝地下著,他站在門口望著衅枫,雙眸緊緊地盯著庭院的大門嫁艇。等待著那一抹身影朗伶,但等到的只有一封書信與一把傘弦撩。看...
    宇智波海綿寶寶閱讀 372評論 0 1