如何通过在 python 中仅输入年份来获取相关的月份和日期
How to get relevant month and date by inputting only the day of year in python
我正在开发 python 的电话簿应用程序作为一个小型项目,我需要在其中存储一个人的 NIC 号码,然后显示 his/her 性别、DOB 和年龄。我必须推导出这 3 个信息并且我能够推导出性别,但我不知道如何推导出出生日期 - 只有出生年份,因为 NIC 号码的前 2 位数字代表出生年份。
在 NIC 号码中,第 3 个三位数是一年中的第几天 :- 从 001 到 366。我也可以将这 3 个数字分开到另一个变量,但我如何推导出月份和日期它指的是什么?
例如:
derivedYear = 1996
dayOfYear = 032
finalDOB = "1996.02.01"
print finalDOB
我想知道如何计算最终DOB值。我正在使用 python 2.7.6
您可以在 datetime.datetime.strptime()
中使用 %j
日期格式,以获得相应的日期时间对象。示例 -
>>> derivedYear = 1996
>>> dayOfYear = 32
>>> import datetime
>>> d = datetime.datetime.strptime('{} {}'.format(dayOfYear, derivedYear),'%j %Y')
>>> d
datetime.datetime(1996, 2, 1, 0, 0)
然后就可以使用datetime对象的.day
和.month
属性来获取对应的日月。示例 -
>>> d.day
1
>>> d.month
2
如果您想要格式为 YYYY.MM.DD
的结果,您可以使用 strftime()
并为其提供格式。示例 -
>>> d.strftime('%Y.%m.%d')
'1996.02.01'
此外,请注意,您不应使用前导 0
定义 dayOfYear
,因为这会使文字成为八进制数,这不是您想要的。
您可以使用 timedelta()
。它可能需要几天时间作为参数,并且当添加到日期时,会将其移动该数量。
import datetime
year = 1996
days = 32
date = datetime.date(year, 1, 1) #Will give 1996-01-01
delta = datetime.timedelta(days - 1) #str(delta) will be '31 days, 0:00:00'
newdate = date + delta
>>> str(newdate)
>>> 1996-02-01
或
>>> newdate.strftime('%Y.%m.%d')
>>> '1996.02.01'
我正在开发 python 的电话簿应用程序作为一个小型项目,我需要在其中存储一个人的 NIC 号码,然后显示 his/her 性别、DOB 和年龄。我必须推导出这 3 个信息并且我能够推导出性别,但我不知道如何推导出出生日期 - 只有出生年份,因为 NIC 号码的前 2 位数字代表出生年份。
在 NIC 号码中,第 3 个三位数是一年中的第几天 :- 从 001 到 366。我也可以将这 3 个数字分开到另一个变量,但我如何推导出月份和日期它指的是什么?
例如:
derivedYear = 1996
dayOfYear = 032
finalDOB = "1996.02.01"
print finalDOB
我想知道如何计算最终DOB值。我正在使用 python 2.7.6
您可以在 datetime.datetime.strptime()
中使用 %j
日期格式,以获得相应的日期时间对象。示例 -
>>> derivedYear = 1996
>>> dayOfYear = 32
>>> import datetime
>>> d = datetime.datetime.strptime('{} {}'.format(dayOfYear, derivedYear),'%j %Y')
>>> d
datetime.datetime(1996, 2, 1, 0, 0)
然后就可以使用datetime对象的.day
和.month
属性来获取对应的日月。示例 -
>>> d.day
1
>>> d.month
2
如果您想要格式为 YYYY.MM.DD
的结果,您可以使用 strftime()
并为其提供格式。示例 -
>>> d.strftime('%Y.%m.%d')
'1996.02.01'
此外,请注意,您不应使用前导 0
定义 dayOfYear
,因为这会使文字成为八进制数,这不是您想要的。
您可以使用 timedelta()
。它可能需要几天时间作为参数,并且当添加到日期时,会将其移动该数量。
import datetime
year = 1996
days = 32
date = datetime.date(year, 1, 1) #Will give 1996-01-01
delta = datetime.timedelta(days - 1) #str(delta) will be '31 days, 0:00:00'
newdate = date + delta
>>> str(newdate)
>>> 1996-02-01
或
>>> newdate.strftime('%Y.%m.%d')
>>> '1996.02.01'