年と月を数値で指定した対象月の日数を計算するAppleScriptです。国際化対応バージョンです。
AppleScriptで日付(date)関連の処理を行うと、どうしても言語依存してしまいがちです。
つまり、日本語環境で作ったAppleScriptをその他の言語環境に持って行ったときに、あるいは逆に英語圏で作られたAppleScriptでまっさきに書き換える必要が出てくるのが、日付関連処理です(その次ぐらいにApple純正アプリケーションの「過剰ローカライズ」によりAppleScriptのオブジェクト名までローカライズされてしまうので、その点を書き換えるとか)。
日本語環境以外で通じる処理を書くというのは、けっこう練習が必要です。ただ、国際化対応の処理をいったん書いておけば、二度目からはその処理を使い回すだけです。
そんな、言語環境非依存で真っ先に必要になってくる、指定月の日数計算を書いたものです。少なくとも、Mac App Storeに出すアプリケーションを書くのであれば、こうした他の言語環境でも動作するルーチンを整備しておく必要があります。
AppleScript名:getMlenInternational_ASOC |
— Created 2015-02-02 by Shane Stanley — Modified 2015-02-02 by Takaaki Naganoya use AppleScript version "2.4" use scripting additions use framework "Foundation" set mList to {} repeat with m from 1 to 12 set the end of mList to getMlenInternational(2012, m) of me –2012 is a Leap Year–2012年はうるう年 end repeat mList –> {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} –現在のカレンダーで指定年月の日数を返す on getMlenInternational(aYear, aMonth) –From Shane’s getMlenInternational(ASOC) v1 set theNSCalendar to current application’s NSCalendar’s currentCalendar() — do *not* use initWithCalendarIdentifier: set theDate to theNSCalendar’s dateWithEra:1 |year|:aYear |month|:aMonth |day|:1 hour:0 minute:0 |second|:0 nanosecond:0 set theResult to theNSCalendar’s rangeOfUnit:(current application’s NSDayCalendarUnit) inUnit:(current application’s NSMonthCalendarUnit) forDate:theDate –> {location:1, length:31} return |length| of theResult end getMlenInternational |
More from my site
(Visited 42 times, 1 visits today)