Кодене :)

41 отговора 0 прегледа
#1

Кодене :)

Проста задача - години между две дати.

имаме функция - age(date1, date2) Имплементация?

Примерно на псевдокод един вариант би бил:


def age(date1, date2)
sign = 1 # assume date1 is earlier than date2
sign, date1, date2 = -1, date2, date1 if date1 > date2

age = date2.year - date1.year

if date2.month < date1.month ||
(date2.month == date1.month && date2. day < date1.day

age -= 1
end

sign * age
end



Как сме сигурни, че тва бачка :) И подходящ интерфейс ли е въвеждането на знак?

I have sold less books on sex than Stephen Hawking has on physics -- Madonna
Отговор
в отговор на Eвлaмпи Пoпдимитpoв #2

Re: Кодене :)

Библиотеки не ползваш ли? Вадиш милисекундите м/у датите и делиш на константа.

Отговор
в отговор на rabin #3

Re: Кодене :)

Дулжината на годината не е константа. Да не коментираме преди григорийй, или след него
Без библиотеки си е проект ппне за 6 месеца

Отговор
в отговор на ~@!$^%*amp;()_+ #4

Re: Кодене :)

След 1970 му задаваш ден, месец, евент. и часове. Връща ти един голям номер с броя милисекунди от заветната нулева 1970. Задаваш и вземаш номера и на новата дата. Вадиш ги, и получаваш в милисекунди разликата между датите. После делиш на 365*24*60*60*1000. Номера с високосните е отразен от библиотеката. Ся, ако разликата е баш 1 ден м/у високосна и нормална - клиентът да каже сребърна ли ще я пише, или златна, по избор Не се сещам друго, ако пропускам нещо - кажи.

Отговор
в отговор на ~@!$^%*amp;()_+ #6

Re: Кодене :)

Делиш дните на дължината на тропическата година (365.2422) и закръгляваш на цяло число. Функцията ще е точна назад докъм мезозойската ера. :)

А за мезозойската ера и по-надолу ще трябва да се гледат астрономически справочници колко е бил дълъг деня тогава.

Отговор
в отговор на croesus #7

Re: Кодене :)

+1 приятел, щом даваш дата до мезозойската ера и делиш на нецяло 365,00

Karmic ~ slap! <: your ears ~ pierce:.
Отговор
в отговор на Eвлaмпи Пoпдимитpoв #8

Re: Кодене :)

доколкото виждам интересува те отговор на въпроса "на колко години е даден човек" по рождена дата и днешна дата. тоест, прецизните методи с разни астрономии не бачкат, простия ежедневен:

int age=date2.year-date1.year;
if (date2.month>date1.month)return age;
if (date2.month<date1.month)return age-1;
if (date2.day>date1.day)return age;
if (date2.day<date1.day)return age-1;





NE SUTOR ULTRA CREPIDAM
Отговор
в отговор на croesus #9

Re: Кодене :)

очевидно става въпрос за функция пресмятаща юридическата възраст, примерно проверка дали даден човек има право на глас. твоя метод ще доведе до проблеми, генерално ползването на флоат във финанси, право и други малоумни области води до проблеми.




NE SUTOR ULTRA CREPIDAM
Отговор
в отговор на zaphod #10

Re: Кодене :)

+1 brevity
+1 simplicity
+1 readability
---
total score: +3, brevity, simplicity, readability

Karmic ~ slap! <: your ears ~ pierce:.
Отговор
в отговор на Eвлaмпи Пoпдимитpoв #11

Re: Кодене :)

Няма информация за фреймуърка. Най-очевидно е:
diff = date1-date2;
age = diff.toDays() / 365;

Отговор
в отговор на zaphod #12

Re: Кодене :)

Винаги ползвам дабъли, вместо флоут. За финанси - децимал.

Ако става въпрос за юридическа възраст, то някой роден на 29ти февруари 1996 кога ще навърши 18 години - на 28ми февруари 2014 или на 1ви март 1024?

Отговор
в отговор на croesus #13

Re: Кодене :)

на първи март предполагам :)




NE SUTOR ULTRA CREPIDAM
Отговор
в отговор на croesus #14

Re: Кодене :)

на 29-ти февруари 2068, кога иначе.

Al: A Bundy never wins, but a Bundy never quits.
Отговор
в отговор на zaphod #15

Re: Кодене :)

Е да де ама на 1ви март 1996 се е родило друго диване и то очевидно е с един ден по-малко от нашето. Защо тогава ще си празнуват рождените дни заедно?

Отговор
в отговор на croesus #16

Re: Кодене :)

казах предполагам :)
не знам как е уредено това, и ако има избори на 28ми дали ще бъде включен в списъците. но със сигурност не е със смятане на астрономическата възраст.




NE SUTOR ULTRA CREPIDAM
Отговор
в отговор на zaphod #17

Re: Кодене :)

Повод за проект за 6 месеца и съдебни дела за 6 поколения.

Отговор
в отговор на croesus #18

Re: Кодене :)

6 са много. 4. както казах - 18 години за високосните идват към 72 за другите.

Al: A Bundy never wins, but a Bundy never quits.
Отговор
в отговор на chupac #19

Re: Кодене :)

Или пък да се забрани на родените на 29 февруари да навършат години, които не са кратни на 4?

От 0 скачат на 4, 8, 12, 16 .. Ако не се случи 2000та някъде измежду тях.

Отговор
в отговор на croesus #20

Re: Кодене :)

бе аз не разбирам ква е драмата. години се навършват на датата.
значи тоя става на 1 година през 2000, 2 през 2004, 3 през 2008, 4 през 2012, сега вече наближава 5 години и е готов за предучилищна.

Al: A Bundy never wins, but a Bundy never quits.
Отговор