python中格式datetime的问题

2024-04-24 20:12:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我对日期格式有问题。这是我的代码:

myDate=datetime.datetime.now()
print myDate #2011-02-02 13:54:26.162000
stime = time.mktime(time.strptime(myDate, '%Y-%m-%d %I:%M%S.%f'))

在我的最后一行我得到了例外:

^{pr2}$

这怎么了?在

编辑 更清楚地说,这是我在stackoverflow上找到的代码的混合:

import random
import time

def strTimeProp(start, end, format, prop):
    """Get a time at a proportion of a range of two formatted times.

    start and end should be strings specifying times formated in the
    given format (strftime-style), giving an interval [start, end].
    prop specifies how a proportion of the interval to be taken after
    start.  The returned time will be in the specified format.
    """

    stime = time.mktime(time.strptime(start, format))
    etime = time.mktime(time.strptime(end, format))

    ptime = stime + prop * (etime - stime)

    return time.strftime(format, time.localtime(ptime))


def randomDate(start, end, prop):
    return strTimeProp(start, end, '%Y-%m-%d %H:%M:%S.%f', prop)

b1=datetime.datetime.now()
print b1
startDate=b1-datetime.timedelta(27375)
print startDate
endDate=b1-datetime.timedelta(6571)
print endDate
randomDate=randomDate(str(startDate), str(endDate), random.random())

我想知道成人的随机出生日期。在

我用的是Windows XP。在


Tags: offormatdatetimetimerandombestartb1
3条回答

time.strptime()的第一个参数必须是字符串,而不是从datetime.datetime.now()返回的datetime对象

将最后一行改为:

stime = time.mktime(time.strptime(str(myDate), '%Y-%m-%d %H:%M:%S.%f'))

(编辑中的代码确实将datetime对象转换为字符串)

事实上,您将到达OverflowError,因为您将超越unix时代。一个简单的解决方案是重构代码以使用datetime和timedelta对象,这样就不会对日期范围产生问题。我自己做了重构,它似乎正在工作(注意,我没有考虑时区的子划分)。在

from datetime import datetime, timedelta
import random

def strTimeProp(start, end, format, prop):
    """Get a time at a proportion of a range of two formatted times.

    start and end should be strings specifying times formated in the
    given format (strftime-style), giving an interval [start, end].
    prop specifies how a proportion of the interval to be taken after
    start.  The returned time will be in the specified format.
    """

    sdatetime = datetime.strptime(start, format)
    edatetime = datetime.strptime(end, format)

    # get time delta and calculate new delta in days * prop
    delta = edatetime - sdatetime # this is a timedelta
    propdelta = timedelta(days = prop * delta.days)

    pdatetime = sdatetime + propdelta
    return pdatetime.strftime(format)


def randomDate(start, end, prop):
    return strTimeProp(start, end, '%Y-%m-%d %H:%M:%S.%f', prop)

b1=datetime.now()
print b1
startDate=b1-timedelta(27375)
print startDate
endDate=b1-timedelta(6571)
print endDate
randomDate=randomDate(str(startDate), str(endDate), random.random())
print randomDate

希望有帮助。在

我想随机获取成人的出生日期。

好吧,如果你说一个成年人的年龄在18到75岁之间(6571-27375天),那么让我们从今天开始找一个日期,它是很多天前的事:

from datetime import datetime, timedelta
import random

birthday = datetime.today() - timedelta(days = random.randrange(6571, 27375))

print 'Person was born on %s' % (birthday.strftime('%Y-%m-%d'))    

相关问题 更多 >