Python | 时间处理

1 获取当前日期和时间

from datetime import datetime
time_now = datetime.now()
print(time_now) # 直接打印会比较规整
time_now
2019-05-06 17:09:14.732634





datetime.datetime(2019, 5, 6, 17, 9, 14, 732634)

2 获取指定日期和时间

dt = datetime(2019, 6, 1, 0, 0, 0)
print(dt)
2019-06-01 00:00:00

3 将datetime转为时间戳timestamp

3.1 方法1

# 转为时间戳 
tsmp = dt.timestamp()
tsmp
1559318400.0

3.2 方法2

import time
def time_check(recent_time):  
    recent_stamp = time.mktime(time.strptime(recent_time, '%Y%m%d%H%M%S'))
    return int(recent_stamp)
time_check('20190601000000')
1559318400

3.3 方法2应用

问题:现在有一个DataFrame,我们想要看时间节点在2018年12月17号之前的样本量有多少?该如何去考虑呢?

思路:

  • 首先将这一列时间变为时间戳的格式
  • 将2018年12月17号变为时间戳
  • 筛选小于第2个中的时间戳的DataFrame

3.3.1 原始数据

import pandas as pd
card = pd.read_excel('时间处理/example_data.xlsx')
card = card.iloc[:,:-1]
card = card[card['提现成功']==1]
print(card.shape)
card.head()
(2006, 5)
授信状态首借日期完成申请授信成功提现成功
432018/10/13111
532018/10/27111
832018/9/21111
932018/11/10111
1332018/7/16111

3.3.2 将这一列时间变为时间戳的格式

# 将时间转为时间戳
import time
def time_check(recent_time):
    try:
        recent_stamp = time.mktime(time.strptime(recent_time, '%Y/%m/%d'))
        # 这里的格式需要根据给定数据的情况进行改变
    except Exception as e:
        print(e)
    return int(recent_stamp)

card['ts'] = card['首借日期'].map(time_check)
print(card.shape)
card.head()
(2006, 6)
授信状态首借日期完成申请授信成功提现成功ts
432018/10/131111539360000
532018/10/271111540569600
832018/9/211111537459200
932018/11/101111541779200
1332018/7/161111531670400

3.3.3 直接筛选

card2 = card[card['ts'] <= time_check('2018/12/17')]
print(card2.shape)
card2.head()
(1841, 6)
授信状态首借日期完成申请授信成功提现成功ts
432018/10/131111539360000
532018/10/271111540569600
832018/9/211111537459200
932018/11/101111541779200
1332018/7/161111531670400

注意:某些编程语言(如Java和JavaScript)的timestamp使用整数表示毫秒数,这种情况下只需要把timestamp除以1000就得到Python的浮点表示方法。

4 从timestamp中提取出月份

4.1 提取函数

def extract_month(time_stamp):
    time_tuple = time.localtime(time_stamp)
    mon_num = time_tuple.tm_mon
    if mon_num<10:
        mon_str = '0'+str(mon_num)
    else:
        mon_str = str(mon_num)
    return str(time_tuple.tm_year)+'-'+mon_str
extract_month(time_check('20190202232359'))
'2019-02'

4.2 测试

time_tuple = time.localtime(1549121039)
time_tuple
time.struct_time(tm_year=2019, tm_mon=2, tm_mday=2, tm_hour=23, tm_min=23, tm_sec=59, tm_wday=5, tm_yday=33, tm_isdst=0)

5 从timestamp提取出时段

5.1 函数

def extract_hour(time_stamp):
    # 提取时段,每日分为12个时段
    time_tuple = time.localtime(time_stamp)
    return time_tuple.tm_hour
extract_hour(1549121039)
23

6 从timestamp中提取出天数

除以86400

1549121039 / 86400 + 1
17930.641655092593
# 计算2019年6月1号到现在有多久
from datetime import datetime
dt1 = datetime(2019, 6, 1, 0, 0, 0)
dt2 = time_now
int((dt1.timestamp() - dt2.timestamp()) / 86400)  + 1
26

7 timestamp转为datetime

7.1 方法1

ts = datetime.fromtimestamp(tsmp)
print(ts)
ts
2019-06-01 00:00:00





datetime.datetime(2019, 6, 1, 0, 0)

7.2 方法2

'''
上面返回的是本地时间,也就是北京时间,下面返回标准的UTC时间
'''
ts_utc = datetime.utcfromtimestamp(tsmp)
print(ts_utc) # 比北京本地时间要提前8小时
ts_utc
2019-05-31 16:00:00





datetime.datetime(2019, 5, 31, 16, 0)

8 str转为datetime

str_ts = '2019-2-27 23:55:59'
dt_ts = datetime.strptime(str_ts, '%Y-%m-%d %H:%M:%S')
print(dt_ts)
dt_ts
2019-02-27 23:55:59





datetime.datetime(2019, 2, 27, 23, 55, 59)

9 datetime转为str

dt_ts_new = datetime(2022,2,22,22,22,22)
dt_ts_str = datetime.strftime(dt_ts_new, '%Y-%m-%d %H:%M:%S')
dt_ts_str
'2022-02-22 22:22:22'

10 具体时间的相加减

from datetime import datetime
from datetime import timedelta
# 现在要算 2022年2月22号 晚上22点22分 退720天离现在多久?
obj_ts = datetime(2022, 2, 22, 22, 22, 22)
obj_ts - timedelta(days = 720)
datetime.datetime(2020, 3, 4, 22, 22, 22)
obj_ts = datetime(2022, 2, 22, 22, 22, 22)
obj_ts - timedelta(days = 1090) 
# 也就是现在还有1090天达到一个特别2的日子
datetime.datetime(2019, 2, 28, 22, 22, 22)
import datetime
datetime.date(year = 2222, month = 2, day = 22)
datetime.date(2222, 2, 22)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值