###前提・実現したいこと
Swiftで日付を取得してそれをユリウス日に変換して表示させるプログラムを書いています。
現在のグレゴリオ暦法による西暦年月日からユリウス日(JD)に変換する計算式は以下の通りです。(年をY、月をM、日をDとします)
JD = 〔365.25Y〕 + 〔Y/400〕 - 〔Y/100〕 + 〔30.59(M-2)〕 + D + 1721088.5
ただし、1月のMは13、2月のMは14とし、このときYはY-1とします。
ここで、〔〕内は小数点以下を切り捨て、整数のみをとります。
計算式のところに以下のようなエラーメッセージが出ました。
###発生している問題・エラーメッセージ
Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions
###該当のソースコード
Swift
1 2import UIKit 3 4class ViewController: UIViewController { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 //現在時刻を取得. 10 let myDate: Date = Date() 11 12 //カレンダーを取得. 13 let myCalendar: NSCalendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)! 14 15 //取得するコンポーネントを決める. 16 let myComponetns = myCalendar.components( 17 [ 18 NSCalendar.Unit.year, 19 NSCalendar.Unit.month, 20 NSCalendar.Unit.day 21 ],from: myDate) 22 23 let Y = myComponetns.year! 24 let M = myComponetns.month! 25 let D = myComponetns.day! 26 27 let JD: Float 28 29 if M > 2 { 30 JD = floor(365.25 * Y + Y / 400 - Y / 100 + 30.59 * (M - 2)) + D + 1721088.5 31 } 32 33 else if M <= 2{ 34 JD = floor(365.25 * (Y - 1) + (Y - 1) / 400 - (Y - 1) / 100 + 30.59 * ((M + 12) - 2)) + D + 1721088.5 35 } 36 37 38// 計算式崩してみた 39/* 40 if M > 2 { 41 let jd = 365.25 * Y + Y / 400 - Y / 100 + 30.59 * (M - 2) 42 let jdf = floor(jd) 43 let JD = jdf + D + 1721088.5 44 } 45 46 else if M <= 2 { 47 let jd = 365.25 * (Y - 1) + (Y - 1) / 400 - (Y - 1) / 100 + 30.59 * ((M + 12) - 2) 48 let jdf = floor(jd) 49 let JD = jdf + D + 1721088.5 50 } 51*/ 52 53// ()つけてみた 54/* 55 if M > 2 { 56 JD = floor((365.25 * Y) + (Y / 400) - (Y / 100) + (30.59 * (M - 2))) + D + 1721088.5 57 } 58 59 else if M <= 2{ 60 JD = floor((365.25 * (Y - 1)) + ((Y - 1) / 400) - ((Y - 1) / 100) + (30.59 * ((M + 12) - 2))) + D + 1721088.5 61 } 62*/ 63 64 print(JD) 65 } 66}
###試したこと
計算式を崩してみたり、()をつけてみたりしましたが、同じエラーが出ました。
どうしてもうまくいかないのでアドバイスお願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
Swift3.0
Xcode8.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。