我想创建一个以不同的时间单位作为方法的时间类



我想创建一个时间类;数量;以及";单位";作为其输入

x = time_input(1.5, 'days')

我希望能够有不同的时间单位可用的方法,这样任何时间都可以快速转换为任何其他时间单位

x.seconds()
x.hours()

我有一个时间单位的字典和它们对应的秒值(我使用的最小时间单位(,这样输入的任何时间都可以转换为秒

time_dict = {'seconds': 1, 'minutes': 60, 'hours': 3600, 'days': 86400, 'weeks': 604800, 'years': 31556952, 'decades': 315569520, 'centuries': 3155695200, 'millennia': 31556952000}

因此,从一个单位时间到另一个单位的转换只是将数量乘以单位(以秒为单位(,然后除以所需的单位(以秒钟为单位(。我的问题是:

  1. 字典是存储这些值的合适工具吗
  2. 为了这个目的,可以将字典构建到类中吗?这甚至是一件可取的事情吗
  3. 这个工具在某个地方已经存在了吗
  1. 可能不会。由于这是一个简单的数学运算,您可以将秒数存储为整数(以避免浮点精度问题(,然后除以每个函数中的正确因子我误读了您的原始问题。是的,dict是存储这些数字的合适方式。或者可以在类中定义单独的常量。不过,请注意,一年并不总是有365天。

  2. 不太确定您所说的构建在类中的字典是什么意思。只需创建一个类似so的类是的,你可以在一个类似这样的类中包含这样一个dict:

class timespan:
_multiplier = {'seconds': 1, 'minutes': 60, 'hours': 3600, 'days': 3600*24, 'weeks': 3600*24*7}
def __init__(self, number, unit):
self.num_seconds = number * timespan._multiplier[unit]

def days(self):
return self.num_seconds / timespan._multiplier['days']
def hours(self):
return self.num_seconds / timespan._multiplier['hours']
  1. 是。datetime.timedelta中存在一些非常类似的东西。您可以将持续时间转换为timedelta对象,然后timedelta.total_seconds()将提供秒数。在那之后,计算天数等只是数学运算。timedelta甚至通过实现除法运算为您简化了它。例如,timedelta(days=1) / timedelta(hours=1)给出24.0

最新更新