【问题标题】:I don't get datetime我没有日期时间
【发布时间】:2018-05-09 12:23:15
【问题描述】:

我正在尝试使用 DateTime 模块,但我永远无法让它在此代码中工作:

class Loan:
    def __init__(self, person_name, bookLoaned, loanStart, loanEnd):
        self.personName = person_name
        self.bookLoaned = bookLoaned
        self.loanStart = datetime.date(loanStart)
        self.loanEnd = datetime.date(loanEnd)

由于某种原因,PyScripter 给出错误“TypeError:an integer is required (got type str)”。

我这样调用 Loan: loan1 = Loan(borrower1.name, BookCopy1.title, ("22/06/2016"), ("22/06/2018"))

我希望它是某种语法错误(这就是为什么我认为只需要发布方法而不是整个脚本) 有人可以帮忙吗?

【问题讨论】:

  • 如何称呼Loan开头
  • 错误是什么?请阅读如何发布minimal reproducible example 并适当地编辑您的问题。您是否阅读了datetime.date 的文档?它需要三个参数。

标签: python datetime


【解决方案1】:

让我们看看:

>>> import datetime
>>> help(datetime.date)
Help on class date in module datetime:

class date(builtins.object)
 |  date(year, month, day) --> date object
 :
>>> datetime.date(2016,6,22)
datetime.date(2016, 6, 22)

date 不接受字符串。看着help(datetime)strptime 听起来像你想要的:

>>> help(datetime.datetime.strptime)
Help on built-in function strptime:

strptime(...) method of builtins.type instance
    string, format -> new datetime parsed from a string (like time.strptime()).

这个函数接受你想要的字符串,但也接受格式。让我们看看time.strptime 对格式化有什么看法:

>>> import time
>>> help(time.strptime)
Help on built-in function strptime in module time:

strptime(...)
    strptime(string, format) -> struct_time

    Parse a string to a time tuple according to a format specification.
    See the library reference manual for formatting codes (same as
    strftime()).

    Commonly used format codes:

    %Y  Year with century as a decimal number.
    %m  Month as a decimal number [01,12].
    %d  Day of the month as a decimal number [01,31].
    %H  Hour (24-hour clock) as a decimal number [00,23].
    %M  Minute as a decimal number [00,59].
    %S  Second as a decimal number [00,61].
    %z  Time zone offset from UTC.
    %a  Locale's abbreviated weekday name.
    %A  Locale's full weekday name.
    %b  Locale's abbreviated month name.
    %B  Locale's full month name.
    %c  Locale's appropriate date and time representation.
    %I  Hour (12-hour clock) as a decimal number [01,12].
    %p  Locale's equivalent of either AM or PM.

    Other codes may be available on your platform.  See documentation for
    the C library strftime function.

所以datetime 对象可以从字符串和适当的格式创建:

>>> datetime.datetime.strptime('22/06/2016','%d/%m/%Y')
datetime.datetime(2016, 6, 22, 0, 0)

但您只需要date。回头看datetime.datetime的帮助,里面有一个date()的方法:

>>> datetime.datetime.strptime('22/06/2016','%d/%m/%Y').date()
datetime.date(2016, 6, 22)

对于您的代码(作为 MCVE):

import datetime

def date_from_string(strdate):
    return datetime.datetime.strptime(strdate,'%d/%m/%Y').date()

class Loan:
    def __init__(self, person_name, bookLoaned, loanStart, loanEnd):
        self.personName = person_name
        self.bookLoaned = bookLoaned
        self.loanStart = date_from_string(loanStart)
        self.loanEnd = date_from_string(loanEnd)

loan1 = Loan('John doe', 'Book Title', "22/06/2016", "22/06/2018")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多