【问题标题】:Obtaining total seconds from a datetime.time object从 datetime.time 对象获取总秒数
【发布时间】:2021-09-22 07:34:18
【问题描述】:

我有一个 datetime.time 对象为 02:00:00 我想将它转换为总秒数,应该是 7200 秒。

【问题讨论】:

  • pandas 标签是怎么回事,您能否澄清一下这是否是 pandas 特有的?

标签: python pandas datetime timedelta


【解决方案1】:

您可以将时间与参考日期结合起来以获取日期时间对象。如果然后减去该参考日期,您将得到一个 timedelta 对象,您可以从中获取total_seconds

from datetime import datetime, time

t = time(2,0,0)

ts = (datetime.combine(datetime.min, t) - datetime.min).total_seconds()

print(ts)
# 7200.0

使用pandas,我将使用时间对象列(系列)的字符串表示并将其转换为 timedelta 数据类型 - 然后您可以使用dt 访问器来获取总秒数:

import pandas as pd

df = pd.DataFrame({'time': [time(2,0,0)]})

df['totalseconds'] = pd.to_timedelta(df['time'].astype(str)).dt.total_seconds()

# df['totalseconds']
# 0    7200.0
# Name: totalseconds, dtype: float64

【讨论】:

    【解决方案2】:

    试试这个方法;参数“时间”必须采用 hh:mm:ss 格式

    def convert_to_seconds(time):
        # Separate all symbols of 'time'
        separated = list(time)
        
        # Delete all ':' symbols
        for i in separated:
            if i == ':':
                separated.remove(i)
        
        # Join the elements of the list together two by two
        separated[0] = separated[0] + separated[1]
        separated[1] = separated[2] + separated[3]
        separated[2] = separated[4] + separated[5]
        
        # Delete the last 3 elements of the list that are useless now
        for count in range(3):
            del l[3]
        
        # Convert to integers
        for i in separated:
            separated[separated.index(i)] = int(i)
    
        # Calculate seconds
        seconds = 0
        seconds += separated[0] * 3600
        seconds += separated[1] * 60
        seconds += separated[2]
    
        return seconds
    

    和之前的方法相比有点长,但是理解起来更简单一些。

    【讨论】:

      【解决方案3】:

      您可以使用日期时间库进行计算

      def time_in_ms():
          from datetime import datetime
          now = datetime.now()
          time_arr = now.strftime("%H:%M:%S").split(":")
          total_time = (int(time_arr[0]) * 3600) + (int(time_arr[1]) * 60) +(int(time_arr[2]))
          return total_time
      

      【讨论】:

        猜你喜欢
        • 2017-07-24
        • 1970-01-01
        • 2017-07-24
        • 2020-03-13
        • 2016-08-29
        • 1970-01-01
        • 2017-12-03
        • 2021-07-21
        相关资源
        最近更新 更多