【问题标题】:Invalid value with datetime library日期时间库的值无效
【发布时间】:2019-12-08 16:08:33
【问题描述】:

我想计算时差。 我不明白为什么我收到了价值 1380.0

我有数据

    date    user    action  id
0   2019-12-07 22:52:23 AnonymousUser   LOGIN   NaN
1   2019-12-07 22:52:25 admin   VACANCY 21.0
2   2019-12-07 22:52:28 admin   VACANCY 20.0
3   2019-12-07 22:52:31 admin   VACANCY 19.0
4   2019-12-07 22:52:35 admin   VACANCY 18.0
5   2019-12-07 22:52:38 admin   VACANCY 16.0
6   2019-12-07 22:52:42 admin   VACANCY 15.0
7   2019-12-07 22:52:45 admin   VACANCY 13.0
8   2019-12-07 22:52:48 admin   VACANCY 17.0
9   2019-12-07 23:02:12 AnonymousUser   VACANCY 16.0

我计算了

class UserInfo:
    def __init__(self, date, user, action, user_id):
        self.date = date.split()[0]
        self.time = date.split()[1]
        self.user = user
        self.action = action
        self.user_id = user_id
        self.start_date = None
        self.end_date = None

    def date_delta(self):
        print(self.end_date.split()[1])
        print(self.start_date.split()[1])
        return datetime.datetime.strptime(self.end_date.split()[1], '%H:%S:%M') - datetime.datetime.strptime(self.start_date.split()[1], '%H:%S:%M')


    def __str__(self):
        return "{};{};{};{};{}".format(self.date, self.time, self.user, self.action, self.user_id)

然后我填写了dict

users = {} 

for row in df.iterrows():
    cur_date = row[1]["date"]
    cur_user = row[1]["user"]
    cur_action = row[1]["action"]
    cur_id = row[1]["id"]

    if cur_user not in users:
        users[cur_user] = UserInfo(cur_date, cur_user, cur_action, cur_id)
        users[cur_user].start_date = cur_date
    else:
        users[cur_user].end_date = cur_date    

最后我计算了用户“admin”的时间差

admin = users["admin"]
print(admin.date_delta().total_seconds())

我收到了输出 22:52:48 22:52:25 1380.0

我预计是 13 秒,为什么我收到 1380?

【问题讨论】:

  • 我认为是毫秒
  • @Stack 你为什么这么认为?来自文档 >> total_seconds() 返回持续时间中包含的总秒数。

标签: python pandas dataframe datetime


【解决方案1】:

您使用了错误的格式字符串来解析时间字符串。

%H:%S:%M 应该是%H:%M:%S

import datetime

s1 = '22:52:48'
s2 = '22:52:25'
print( (datetime.datetime.strptime(s1, '%H:%S:%M') - datetime.datetime.strptime(s2, '%H:%S:%M')).total_seconds() )
# 1380
print( (datetime.datetime.strptime(s1, '%H:%M:%S') - datetime.datetime.strptime(s2, '%H:%M:%S')).total_seconds() )
# 23

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 2017-12-10
    • 2017-07-18
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    相关资源
    最近更新 更多