資料清洗之微博時間清洗
爬取微博的時候時間格式比較亂,存到資料庫要統一成datatime型別,所以需要用到對時間的轉換
這裡是對time模組和datetime的模組的使用。
對於當天的有三種:
40秒前
50分鐘前
今天 08:12
針對這三種,第一步要做的是獲取當前的年月日
import datetime
now = datetime.datetime.now()
ymd = now.strftime("%y-%m-%d")
#或者#datetime.day,datetime.month,datetime.year 分別表示乙個datetime物件的日,月,年
解釋第一行我們匯入datetime模組
第二行獲取當前的時間,datetime型別:
2018-07-20 09:28:19.080791
包含年月日和時分秒
第三行,strftime函式是格式化字元裡面的引數是乙個輸出的字串格式:
比如這裡 的%y代表四個數字表示的年份(%y是二位的),%m是表示月份,%d返回的是當前時間是當前月的第幾天,其他的格式看下面的圖有詳細的解釋。
!(接上我們分析第乙個,
40秒前
第一步:獲取當前的時間
上面已經獲取now了。
第二步:減去40s
時間上的加減我們使用datetime的timedalte屬性,
timedalte 是datetime中的乙個物件,該物件表示兩個時間的差值。
timedalte 的建構函式如下:
def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ...,
milliseconds: float = ..., minutes: float = ..., hours: float = ...,
weeks: float = ...) -> none: ...
於是就有了下面的結果
newdate = now - datetime.timedelta(minutes=int(seconds[:-2]))
同理50分鐘前
newdate = now - datetime.timedelta(minutes=int(newstr[:-3]))
然後說最後另一種:
今天 08:12
第一步:補齊年月日
第二步:使用time模組的strptime() 函式根據指定的格式把乙個時間字串解析為時間元組,
語法strptime()方法語法:
time.strptime(string[, format])
引數string -- 時間字串。
format -- 格式化字串。
返回值返回struct_time物件。
日期格式化符號:
%y 兩位數的年份表示(00-99)
%y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%h 24小時制小時數(0-23)
%i 12小時制小時數(01-12)
%m 分鐘數(00=59)
%s 秒(00-59)
%a 本地簡化星期名稱
%a 本地完整星期名稱
%b 本地簡化的月份名稱
%b 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地a.m.或p.m.的等價符
%u 一年中的星期數(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%w 一年中的星期數(00-53)星期一為星期的開始
%x 本地相應的日期表示
%x 本地相應的時間表示
%z 當前時區的名稱
%% %號本身
第三步:time.mktime轉換成時間戳
第四步:使用datetime的fromtimestamp模組,把時間戳轉換為
mdate = time.mktime(time.strptime(ymd + newstr, '%y-%m-%d今天 %h:%m'))
newdate = datetime.datetime.fromtimestamp(mdate)
其他的處理思路就一樣了,下面**給出目前遇到的格式:
def get_format_datetime(self,datestr):
now = datetime.datetime.now()
ymd = now.strftime("%y-%m-%d")
y = now.strftime("%y")
newstr = datestr
newdate = now
if u"樓" in datestr:
newstr = datestr.split(u"樓")[-1].strip()
if (u"今天" in newstr):
mdate = time.mktime(time.strptime(ymd + newstr, '%y-%m-%d今天 %h:%m'))
newdate = datetime.datetime.fromtimestamp(mdate)
elif (u"月" in newstr):
mdate = time.mktime(time.strptime(y + newstr, '%y%m月%d日 %h:%m'))
newdate = datetime.datetime.fromtimestamp(mdate)
elif (u"分鐘前" in newstr):
newdate = now - datetime.timedelta(minutes=int(newstr[:-3]))
elif (u"秒前" in newstr):
newdate = now - datetime.timedelta(minutes=int(newstr[:-2]))
#以下為手機端
elif "-" in newstr:
mdate = time.mktime(time.strptime(y+"-"+ newstr, '%y-%m-%d'))
newdate = datetime.datetime.fromtimestamp(mdate)
elif (u"昨天" in newstr):
mdate = time.mktime(time.strptime(ymd + newstr, '%y-%m-%d昨天 %h:%m'))
newdate = datetime.datetime.fromtimestamp(mdate)-datetime.timedelta(days=1)
elif (u"小時前" in newstr):
newdate = now - datetime.timedelta(hours=int(newstr[:-3]))
else:
newdate = datetime.datetime.strptime(newstr, "%y-%m-%d %h:%m")
return newdate
SQL語句獲得本年日期資料與本月日期資料
本年 select dateadd dd,number datename yy,getdate 0101 from master.spt values where type p andnumber datediff dd,datename yy,getdate 0101 datename yy,ge...
ORACLE插入日期資料
命令 insert into floor values to date 年 月 日 時 分 秒 yyyy mm dd hh24 mi ss 例子 在 sql plus 環境。當省略hh mi和ss對應的輸入引數時,oracle使用0作為default值。如果輸入的日期資料忽略時間部分,oracle會...
python時間日期資料處理
匯入相關庫 import pandas as pd import numpy as np import time import datetime import matplotlib.pyplot as plt 解決座標軸刻度負號亂碼 plt.rcparams axes.unicode minus f...