2007年9月7日金曜日

年度を計算するには?

年度を計算するのが卒研で必要になったので,プログラムできない学生になり考えてみました.
以下のプログラムは一応日本の年度の定義に対応するものです.
言語はSqueakです.

check1 :=DateAndTime now.
check2 :=(check1 asYear) + (Year year:1).
check3 :=DateAndTime year:(check2 year) month:4 day:1.
check4 := check2 daysInYear.
(check3 - check1)days asInteger <= check4
ifTrue:[^check1 year]
ifFalse:[^ ((check1 asYear) - (Duration days:365))year. ].

こうやって自分が書いたプログラムをみると自分ってプログラムできない人だな・・・って思い寂しい気持ちになります.

もっとすっきり書けないものなのか.
アメリカだと年度の定義はどうなんだろう・・・.
アメリカの学校は9月はじまりだけど,それが年度と直結していない様子.

年度って謎ですね.

追記:匿名さんからのコメントでワンライナーなcodeを教えていただきました.
がんばって勉強しなくては.

2 件のコメント:

匿名 さんのコメント...

日本の会計年度という条件で.
| now | (now _ DateAndTime now) month >= 4 ifTrue: [now year] ifFalse: [now year - 1]

Ringo さんのコメント...

>匿名さん

ありがとうございます.
たしかに何月かさえわかれば判定できますね.