2015-08-17 5 views
3

Я разрабатываю приложение для телефонной книги из python в качестве мини-проекта, в котором у меня есть требование хранить номер NIC человека, а затем показать свой пол, DOB и возраст. Я должен получить эти 3 информации, и я могу получить пол, но я не знаю, как получить DOB - только год рождения, потому что первые 2 цифры NIC представляют год рождения.Как получить соответствующий месяц и дату, вводя только день года в python

В номере NIC третьими цифрами являются день года: от 001 до 366. Я также могу отделить эти 3 цифры от другой переменной, но как получить месяц и дату месяца, это относится к?

Например:

derivedYear = 1996 
dayOfYear = 032 

finalDOB = "1996.02.01" 
print finalDOB 

Я хочу знать, как вычислить значение finalDOB. Я использую python 2.7.6

ответ

1

Вы можете использовать формат %j для дня года в datetime.datetime.strptime(), чтобы получить соответствующий объект datetime. Пример -

>>> derivedYear = 1996 
>>> dayOfYear = 32 
>>> import datetime 
>>> d = datetime.datetime.strptime('{} {}'.format(dayOfYear, derivedYear),'%j %Y') 
>>> d 
datetime.datetime(1996, 2, 1, 0, 0) 

Затем вы можете использовать .day и .month атрибут объекта даты и времени, чтобы получить соответствующий день и месяц. Пример -

>>> d.day 
1 
>>> d.month 
2 

Если вы хотите результат в формате - YYYY.MM.DD - вы можете использовать strftime() и поставить формат к нему. Пример -

>>> d.strftime('%Y.%m.%d') 
'1996.02.01' 

Кроме того, обратите внимание, что вы не должны определить свой dayOfYear с ведущим 0, как бы буквальный восьмеричное число, которое не было бы то, что вы хотите.

+0

Спасибо .. Это действительно работал –

+0

У меня еще один вопрос ... второстепенную DayOfYear 060 в високосном году, относится к 29 февраля. Но в не високосный год 060 относится к 1 марта. Согласно формату NIC, независимо от скачка или не високосного года, они выдают номера за все 366 дней. Если не високосный год, 060 не выдается, а марш 1 представлен 061, как в високосный год ... Но как я могу реализовать это в своей программе Python? Я пробовал dayOfYear + = 1, но все же он дает выход 1 марта за 060 в течение не високосного года. –

+1

Вы, кажется, ошибаетесь, вместо того, чтобы добавить 1 для високосных лет, вы должны вычесть 1 за непиковые годы. И после вычитания использования даты и времени для преобразования. –

2

Вы можете использовать timedelta(). Это может занять несколько дней в качестве аргумента, и при добавлении к дате сдвинет его на эту сумму.

import datetime 

year = 1996 
days = 32 

date = datetime.date(year, 1, 1) #Will give 1996-01-01 
delta = datetime.timedelta(days - 1) #str(delta) will be '31 days, 0:00:00' 
newdate = date + delta 

>>> str(newdate) 
>>> 1996-02-01 

или

>>> newdate.strftime('%Y.%m.%d') 
>>> '1996.02.01' 
+0

Я получил эту ошибку - Traceback (последний звонок последний): Файл "test2.py", строка 4, в дата = datetime.datetime (год) TypeError: Обязательный аргумент 'месяц' (поз 2) не найдено –

+1

@PraveenFernando Извините, я забыл, что вам нужно дать месяц и день в datetime. Только обновленный код.попробуйте еще раз :) – Parker

+0

yup, все в порядке ... Я пробовал ... ваш метод дает мне выход 1996-02-01 00:00:00 со временем .. спасибо за вашу помощь! :-) –