Python中time日期、時間格式轉換

     在咱們平常的數據採集中,時間time的重要性毋庸置疑的,由於它是衡量採集到的信息是否具備正確時效性的惟一因素。若是咱們採集到的信息對於客戶來講已是過時的信息,這對於客戶沒有使用的價值,影響客戶使用。html

因此咱們今天就來講說在平常採集中遇到的時間如何正確採集,保證信息的時效性。python

1>.首先咱們要獲取當前的時間,纔能有效的判斷信息的時效性。post

import datetime
#獲取當前時間
gtime = datetime.datetime.now()
# #獲取當前時間的年 月 日.day
year = datetime.datetime.now().year
month = datetime.datetime.now().month
day = datetime.datetime.now().day

2>.時間的格式化。在採集外文網站中常會遇到(Mar 09,2018\ Thu Jun 22 00:00:00 CST 2017),對照着進行匹配測試

    %a星期的簡寫。如 星期三爲Web
    %A星期的全寫。如 星期三爲Wednesday
    %b月份的簡寫。如4月份爲Apr
    %B月份的全寫。如4月份爲April
    %c: 日期時間的字符串表示。(如: 04/07/10 10:43:39%d: 日在這個月中的天數(是這個月的第幾天)
    %f: 微秒(範圍[0,999999])
    %H: 小時(24小時制,[0, 23])
    %I: 小時(12小時制,[0, 11])
    %j: 日在年中的天數 [001,366](是當年的第幾天)
    %m: 月份([01,12])
    %M: 分鐘([00,59])
    %p: AM或者PM
    %S: 秒(範圍爲[00,61],爲何不是[00, 59],參考python手冊~_~%U: 周在當年的週數當年的第幾周),星期天做爲周的第一天
    %w: 今天在這周的天數,範圍爲[0, 6],6表示星期天
    %W: 周在當年的週數(是當年的第幾周),星期一做爲周的第一天
    %x: 日期字符串(如:04/07/10%X: 時間字符串(如:10:43:39%y: 2個數字表示的年份
    %Y: 4個數字表示的年份
    %z: 與utc時間的間隔 (若是是本地時間,返回空字符串)
    %Z: 時區名稱(若是是本地時間,返回空字符串)
    %%: %% => %

 

#Mar 09,2018\ Thu Jun 22 00:00:00 CST 2017
c_time = 'Mar 09,2018'
print(type(c_time))  #查看類型是--<str>
ctime = datetime.datetime.strptime(c_time,"%b %d,%Y")
print(ctime)
print(type(ctime))  #查看類型是--<class 'datetime.datetime'>

3>.藉助正則來提高匹配率網站

ctime = data.xpath('''//span[@class="time"]''').regex('(\d+-\d+-\d+ \d+:\d+:\d+|\d+-\d+-\d+ \d+:\d+|\d+-\d+-\d+|\d+-\d+ \d+:\d+)').datetime()

4>.對於時間裏麪包含漢字(年、月、日)(剛剛、分鐘前、小時前、天前)url

  4.1.時間裏麪包含年、月、日---2018年3月15日 12:25spa

    import htmlparser  #導包
    
    ctime = htmlparser.Parser(data.xpath('''//span[@class="time"]''').text().replace('', '-').replace('', '-').replace('', '')).datetime()

  4.2.時間裏麪包含剛剛、分鐘前、小時前、天前unix

    ctime = data.xpath('''//span[@class="topic_time"]/text()''').text().strip()
    if "剛剛" in ctime:
        ctime = gtime - datetime.timedelta(minutes=1)
    elif "分鐘前" in ctime:
        ctime = re.search(r'\d+', ctime).group()
        ctime = gtime - datetime.timedelta(minutes=int(ctime))
    elif "小時前" in ctime:
        ctime = re.search(r'\d+', ctime).group()
        ctime = gtime - datetime.timedelta(hours=int(ctime))
    elif "天前" in ctime:
        ctime = re.search(r'\d+', ctime).group()
        ctime = gtime - datetime.timedelta(days=int(ctime))
    else:
        # return None
        ctime = htmlparser.Parser(ctime).datetime()

5>.對於正文裏面沒有時間的,查看是否url裏面含有時間的信息  http://www.shanxi.gov.cn/sq/dwjl/gjjmlw/201802/t20180208_396922.shtmlcode

import re

post_url = 'http://www.shanxi.gov.cn/sq/dwjl/gjjmlw/201802/t20180208_396922.shtml'
c_time = re.search('''t(\d{8})_''', post_url).group(1)
ctime = datetime.datetime.strptime(c_time, "%Y%m%d") - datetime.timedelta(0, 3600 * 8)

6>.時間戳的轉化(若是採集的內容裏面沒有時間,能夠查找相似1548906627這樣的一串數,打開http://tool.chinaz.com/Tools/unixtime.aspx,測試一下是不是時間戳格式的)
若是肯定是時間戳格式的htm

    ===============時間戳格式轉換==============
    c_time1 = '獲取到的時間戳'
    ctime = datetime.datetime.utcfromtimestamp(int(c_time1))

最後,此內容爲本身整理所得,若有不適合你的狀況,請另行其它方法解決。

相關文章
相關標籤/搜索