使用Python获取ISO 8601日历中的周数年数日期代码
我需要得到一个ISO 8601日期,它在python 3.0中只显示给定日期的周数和两位数年份代码。这需要采用以下格式:YYWW(YY表示两位数的年份代码,WW表示周数)。我曾尝试在python中使用datetime模块,并使用%G和%V使用strftime获取周数,但在运行以下代码时出现值错误:使用Python获取ISO 8601日历中的周数年数日期代码,python,python-datetime,Python,Python Datetime,我需要得到一个ISO 8601日期,它在python 3.0中只显示给定日期的周数和两位数年份代码。这需要采用以下格式:YYWW(YY表示两位数的年份代码,WW表示周数)。我曾尝试在python中使用datetime模块,并使用%G和%V使用strftime获取周数,但在运行以下代码时出现值错误: 从日期时间导入日期时间 now_iso=(datetime.now().strftime('%G%V')) 如果您能提供任何帮助,我们将不胜感激。提前谢谢。以下是我得到的错误: Traceback
从日期时间导入日期时间
now_iso=(datetime.now().strftime('%G%V'))
如果您能提供任何帮助,我们将不胜感激。提前谢谢。以下是我得到的错误:
Traceback (most recent call last):
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 1547, in __call__
return self.func(*args)
File "C:/Users/ctschantz/Python Project 3/Solenoids Label Program.py", line 881, in close_part
part_validation()
File "C:/Users/ctschantz/Python Project 3/Solenoids Label Program.py", line 245, in part_validation
part_label_create()
File "C:/Users/ctschantz/Python Project 3/Solenoids Label Program.py", line 58, in part_label_create
now_bc = (datetime.now().strftime('%G%V'))
ValueError: Invalid format string
我找到了解决办法。它可能不是最漂亮的,但:
from datetime import datetime
now_bc = (datetime.now().isocalendar())
now_bc_year = str(now_bc[0])
year_two_digits = now_bc_year[-2:]
now_bc_week = now_bc[1]
if len(str(now_bc_week)) == 1:
td_week = '0' + str(now_bc_week)
else:
td_week = now_bc_week
date_code = year_two_digits + td_week
print(date_code)
没有
%G
和%V
的简明解决方案可以如下所示:
from datetime import datetime
year, week, _ = datetime.now().isocalendar()
print("{0}{1:02}".format(year % 100, week))
{1:02}
表示将前导0
s添加到索引为1
的参数中,直到其宽度至少为2
。有关更多信息,请查看
如果年份可以用4位数字打印,则它将成为一行:
print("{0}{1:02}".format(*datetime.now().isocalendar()))
预期输出应该是什么?预期输出将是YYWW。与使用以下代码的格式相同:from datetime import datetime now_bc=(datetime.now().strftime(“%y%W”))显示实际错误(最好是完全回溯)。在我看来,您的代码是正确的。@CodyTschantz“获取值错误”:我获取
202009
。无法用Python2.7/3.x重现这一点,请确保您发布的代码的行为与您声称的一样。您使用的是什么特定版本?From-3.6版中新增:%G
。。。添加了%V
。%G
给出的是4位数字,而不是2位数字。是的,就是这样。