2016-10-08 3 views
2

私は、特定の日と場所の夏時間の正確な量を計算しようとしています。私は日の出と計算を設定するためにPythonモジュール "Ephem"を見てきました。以下は、コードです:Python Ephem sunset and sunrise

import ephem 
California_forest = ephem.Observer() 
California_forest.date = '2001/01/01 00:00' 
California_forest.pressure = 0 
California_forest.horizon = '-0:34' 
California_forest.lat, California_forest.lon = '38.89525', '-120.63275' 
California_forest.altitude = 1280 

print(California_forest.previous_rising(ephem.Sun())) 
2000/12/31 15:21:06 

print(California_forest.previous_rising(ephem.Sun())) 
2001/1/1 00:50:46 

モジュールはチュートリアルのようにうまく動作します。しかし、「日の出」と「日没」の出力を文字列として保存できると思っていました。私は変数に計算を保存するとき、それは私が理解しない浮動数与えます:

sunrise = California_forest.previous_rising(ephem.Sun()) 
sunrise 
36890.13965508334 

sunset = California_forest.next_setting(ephem.Sun()) 
sunset 
36890.53525430675 

を私はprint文の出力と同じであった文字列を期待していたが、私は間違っていました。誰も私がどのようにこれらの出力を使用し、特定の場所の昼間の時間量を計算するための提案を持っていますか?大変感謝しています!

+1

あなた 'プリント(のrepr(日の出))'、何であれば 'プリント(日の出)場合は、'何を得るのですかあなたが 'print(type(sunrise))'ならばどうしますか? – zvone

答えて

1

本当にあなたのオブジェクトの文字列表現は何ですか?文字列表現を取得する必要がある場合は、__str__()という特殊メソッドを次のように呼び出します。

sunrise = California_forest.previous_rising(ephem.Sun()).__str__() 
sunrise 
'2000/12/31 15:21:06' 

sunset = California_forest.next_setting(ephem.Sun()).__str__() 
sunset 
'2001/1/1 00:50:46' 
+0

'__str__'は何かを' str'に変換するときにPythonインタプリタによって呼び出される*特別な*メソッドです。これは直接呼び出すことができますが、 'str(whatever)' – zvone

2

これはconvrted to strがそれを印刷するときに表示さきれいにフォーマットされた文字列を返し、ephem._libastro.Dateオブジェクトを返すように見えます。

コンソールにsunriseと入力すると、実際にはprint(repr(sunrise))と同じになりますが、見栄えのよい文字列は生成されません。基礎となるfloat値を出力します。

あなたは、単にstrに変換し、文字列表現を保存したい場合:

sunrise = str(California_forest.previous_rising(ephem.Sun()))