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


     在我們日常的數據采集中,時間time的重要性毋庸置疑的,因為它是衡量采集到的信息是否具有正確時效性的唯一因素。如果我們采集到的信息對於客戶來說已經是過期的信息,這對於客戶沒有使用的價值,影響客戶使用。

所以我們今天就來說說在日常采集中遇到的時間如何正確采集,保證信息的時效性。

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

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>.對於時間里面包含漢字(年、月、日)(剛剛、分鍾前、小時前、天前)

  4.1.時間里面包含年、月、日---2018年3月15日 12:25

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

  4.2.時間里面包含剛剛、分鍾前、小時前、天前

    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.shtml

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,測試一下是否是時間戳格式的)
如果確定是時間戳格式的

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

最后,此內容為自己整理所得,如有不適合你的情況,請另行其它方法解決。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM