2016-02-24 5 views
1

У меня есть эти датыСтранная преобразования временной метки

  • 2016-02-26 12:12:12
  • 2016-02-friday 12:12:12

(те две даты относится к в тот же день)

Если преобразовать первый в отметьте метку времени и затем преобразуйте ее обратно в читаемом формате, в котором она работает.

Но если я попробую то же самое на втором, он не конвертируется обратно в нужный день!

Вот что я сделал:

sTimestamp = time.mktime(
     datetime.datetime.strptime(
      "2016-02-26 12:12:12", 
      "%Y-%m-%d %H:%M:%S") 
     .timetuple()) 
print("date from timestamp = " + 
     datetime.datetime.fromtimestamp(int(sTimestamp)) 
     .strftime('%Y-%m-%d %H:%M:%S')) 

sTimestamp = time.mktime(
     datetime.datetime.strptime(
       "2016-02-friday 12:12:12", 
       "%Y-%m-%A %H:%M:%S") 
     .timetuple()) 
print("date from timestamp = " + 
     datetime.datetime.fromtimestamp(int(sTimestamp)). 
     strftime('%Y-%m-%d %H:%M:%S')) 

Выход из двух thoses линий:

  • дата с отметкой времени = 2016-02- 12:12:12
  • дата от временной отметки = 2016-02- 12:12:12

Как вы можете видеть, первый вернулся к 26, а второй преобразует обратно в 01 по неизвестной причине. И, кстати, 01 - понедельник ...

Для информации я использую python 3.4, и я нахожусь в Windows.

ответ

1

Первая проблема:

(Эти две даты относится к в тот же день)

Нет, они этого не делают. Первый относится к последней пятнице февраля в 2016 году; второй относится, в лучшем случае, пятницы в феврале в 2016 году

Кроме того, strptime предназначена для использования с номерами, как строки, как "Friday" не точны. Python docs говорят:

Для объектов времени не следует использовать коды формата для года, месяца и дня, так как объекты времени не имеют таких значений. Если они все равно используются, 1900 заменяется на год, а 1 на месяц и день.

Так что, похоже, используя неточные значения, такие как "Friday" использовать один и тот же запасной вариант на недобросовестный 1.

+0

Humm ok! Спасибо за Ваш ответ. Кто-нибудь не понимает, как все еще делать то, что я хочу? – Doctor

+0

@Doctor: Если вы хотите получить '26' с' friday', нет. С некоторым дополнительным кодом лучше всего вы можете рассчитывать как список всех пятниц в феврале (или в первую пятницу, или в последнюю пятницу, или в последнюю пятницу или в следующую пятницу), - но вам придется выяснить, какие один, который вы хотите. –

+0

@Doctor: если вы знаете, что всегда хотите «последнюю пятницу»; вы можете [использовать 'dateutil.relativedelta()'] (http://stackoverflow.com/a/12687078/4279). – jfs

Смежные вопросы