【问题标题】:How should negative time work?负时间应该如何工作?
【发布时间】:2013-05-04 02:52:59
【问题描述】:

我正在尝试创建一个Time -class,它可以处理hh:mm:ss 格式的时间。 这就是我所拥有的:

class Time(object):

    def __init__(self, h=0, m=0, s=0):
        #private
        self.__hours = 0
        self.__minutes = 0
        self.__seconds = 0

        #public
        self.hours = h
        self.minutes = m
        self.seconds = s

    @property
    def hours(self):
        return self.__hours

    @hours.setter
    def hours(self, value):
        if value < 0:
            raise ValueError
        self.__hours = value

    @property
    def minutes(self):
        return self.__minutes

    @minutes.setter
    def minutes(self, value):
        if value < 0:
            raise ValueError
        self.hours += int(value / 60)
        self.__minutes = value % 60

    @property
    def seconds(self):
        return self.__seconds

    @seconds.setter
    def seconds(self, value):
        if value < 0:
            raise ValueError
        self.minutes += int(value / 60)
        self.__seconds = value % 60

我遇到了负时间值的问题。 我要做的是检查时间值(例如minutes)是否设置为负数,如果是,则提高ValueError。 但问题是,我也想使用负时间格式,我只是不确定如何。

负时间值应该如何表现? 他们甚至可以用我的二传手来实现吗? 我什至无法开始,我不需要你为我编写代码,但至少给出一些提示并解释负时间是如何工作的。

【问题讨论】:

  • 在设置self.hours等方面没有点,因为将使用具有相同名称的@property描述符无论如何
  • 我认为您将时间 delta 与绝对时间混淆了。这是一个班级建模的绝对时间,一天中的一个时间。时间增量模拟相对时间,这可能是负数。好好看看datetime 模块。

标签: python time python-3.x negative-number


【解决方案1】:

时间有两个概念:

  • 瞬间(瞬间)
  • 两个瞬间之间的长度(时间跨度或时间增量)。

我们以秒和秒的倍数为单位测量时间跨度。

时间片刻使用相同的单位来描述,被理解为某个参考时间之间的时间跨度(如 0 BC,或 Unix 纪元)。 (不过,单位更复杂 - 我们使用日历来为特定时刻分配好听的名称,例如“7 月 16 日”,而不是常规的秒数倍数)。


所以:

  • 时间跨度或肯定可以是负数(作为一个整体)
  • 瞬间也可以是负数,因为里面有一个时间跨度(例如公元前 -3000 年),但实际格式没有负系数(说“14:-3”或“六月 -第五”)。

所以:

  • 立即将minutes 设置为负值,应该是ValueError
  • 可能有一个方法 .later(minutes=10) 等效于 .earlier(minutes=-10)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 2016-02-16
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多