Проблема с форматом datetime в python

1

У меня проблема с датой форматирования. Это мой код:

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'))

В моей последней строке я получаю исключение:

File "c:\Python27\Lib\_strptime.py", line 322, in _strptime
  found = format_regex.match(data_string)

Что случилось с этим?

ИЗМЕНИТЬ Чтобы быть более понятным, это мой весь код, который представляет собой сочетание того, что я нахожу в 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.

  • 1
    Вы пытаетесь получить число секунд с эпохи?
  • 0
    @user: Прошу прощения? Так что вы пытаетесь сделать?
Показать ещё 4 комментария
Теги:
datetime

3 ответа

4
Лучший ответ

Я пытаюсь получить случайную дату рождения для взрослых.

Хорошо, поэтому, если вы скажете, что взрослым может быть от 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'))    
3

В самом деле, вы попадете в 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

Надеюсь, что это поможет.

0

Первым аргументом time.strptime() должна быть строка, а не объект datetime, который вы возвращаете из datetime.datetime.now()

Измените свою последнюю строку на:

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

(Код в вашем редактировании преобразует объект datetime в строку, хотя)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню