TCL에 두 날짜 사이의 시간을 측정하는 코드가 있습니다.윤년을 어떻게 작동합니까?
첫 번째 두 작품이지만 마지막 작품은 보이지 않습니다. 1 년에 12 개월 밖에 안 될 수 있기 때문에 완전히 잘못 계산됩니다.하지만 이보다 더 많은 것이 있습니다.
어쨌든 윤년이 문제라고 생각하지만 확실하지 않습니다. 도울 수 있니?
proc isTimeAgo {t1} {
set t2 "1387524660"
#set t2 [clock seconds]
set cnt [expr {(($t2 - $t1)/31536000)}]
set cur [clock add $t1 $cnt years]
set res {}
foreach unit {years months weeks days hours minutes seconds} {
while {$cur <= $t2} {
set cur [clock add $cur 1 $unit]
incr cnt
}
set cur [clock add $cur -1 $unit]
incr cnt -1
if {$cnt} {
lappend res $cnt $unit
}
set cnt 0
}
return $res
}
puts "1: [isTimeAgo "1355988659"]"
puts "2: [isTimeAgo "1355988660"]"
puts "3: [isTimeAgo "1355988661"]"
proc days_per_month year {
set leap [expr {($year%4)==0 && (!($year%400) || ($year%100))}]
set days [list 31 [expr {$leap ? 29 : 28}] 31 30 31 30 31 31 30 31 30 31]
return $days
}
이것의 결과는 다음과 같습니다
1: 1 years 1 seconds <- Correct
2: 1 years <- Correct
3: 11 months 4 weeks 1 days 23 hours 59 minutes 59 seconds <- Wrong
나는 de-ja-vous했다. 비슷한 질문이 몇 시간 전에 나타 났습니까? –
왜 잘못 됐습니까? 나는 상세한 계산을하지는 않았지만, 3 번째 줄에는 11 개월이 있고 나머지 부분은 1 개월 미만입니다. 11 월에는 30 일, 4 주 및 2 일이 있으며 결과 종류가 나에게 의미가 있습니다. – Jerry
Jerry, 올바른 경우 다른 시각에서 볼 것입니다. 매월은 매월, 매주 n 주, 며칠 만에 계산됩니다. 메신저 출력은 "1 년 2 초" – Whiskey