用于进行正确日期格式化的基本字符串操作

时间:2016-04-05 22:53:41

标签: python date python-3.x datetime

你能解决一个小的编程问题吗?我试图以dd-mm-YYYY的形式创建日期,如果我随机选择的日期是1位数字,我会在开始时添加0来制作例如01052015 for 01-05-2015而不是152015。

这是我的代码......

from random import randint

day = str(randint(1, 29))
if day in range(1,9):
    zero_day = str("0"+day)
else:
    zero_day = day

month = str(randint(5, 10))
if month in range(5, 9):
    zero_month = str("0"+month)
else:
    zero_month = month

split_date= zero_day + zero_month + "2015"

print("Day="+zero_day)
print("Month="+zero_month)
print(split_date)

为什么这不起作用?

它不会在1位数天和月之前添加任何0。

非常令人沮丧,我确信它只是一件小事。

感谢。

4 个答案:

答案 0 :(得分:4)

您正在将随机数转换为字符串,然后测试它是否在范围内 - 由整数组成:

简单更改您的代码:

day = randint(1, 29)
if day < 10:
    zero_day = "0"+str(day)
else:
    zero_day = str(day)

或者,更好的是,您可以使用字符串格式来处理它。这是当天的一个例子:

zero_day = '{:02d}'.format(randint(1, 29))

这将填零随机整数。如果该数字为0 <= n <= 9,则根据需要将具有前导零。

生成最终日期字符串:

random_date = '{:02d}-{:02d}-{}'.format(randint(1,29), randint(5,10), 2015)

答案 1 :(得分:4)

我会使用datetime模块:

from random import randint
from datetime import datetime

day = randint(1, 29)
month = randint(5, 10)
year = 2015

dt = datetime(year=year, month=month, day=day)
dt_str = dt.strftime('%Y-%m-%d')

print(dt_str)

输出是:

2015-05-02

答案 2 :(得分:1)

day = str(randint(1, 29))
if day in range(1,9):

您的问题是您要将随机数转换为String。你的代码检查字符串&#34; 1&#34;在1到8之间的数字范围内(不是9,你必须添加+1)。解决方案很简单:只需将数字转换为if-block

中的字符串即可
day = randint(1, 29)
if day in range(1,10):      # why not just use day < 10?
    zero_day = "0"+str(day)
else:
    zero_day = str(day)

答案 3 :(得分:0)

范围功能不包括在内。所以范围(5,9)会产生5,6,7,8。范围也会生成整数,而不是字符串。