如何使用UT中的datetime.time对象并将其转换为给定经度的本地时间
问题描述:
我需要将UT中结合了经度的时间转换为本地时间。我正在分析未来的地球观测卫星任务,并需要做这种转换才能继续。如何使用UT中的datetime.time对象并将其转换为给定经度的本地时间
我发现这个问题的一个通用解决方案here:T(lt)= T(ut)+ lon /(360/24),然而实现它却让我绝对疯狂。
我的数据是日期时间时对象:
In[9]: sattime[0]
Out[9]: datetime.time(18, 0)
和经度从0到360度坐标。
我需要把这个对象,并使用上述公式转换为本地时间。我只关心相对于午夜的时间而不关心日期(实际上我的其他代码当前只使用datetime.time对象,最好是本地时间输出将是相同类型的对象)。
我试过以下从here,但我坚持让本地变量回到时间对象。
test = 4
for (i,j) in zip(sattime, satloncor):
td = datetime.datetime.combine(datetime.datetime.min, i) - datetime.datetime.min
seconds = td // datetime.timedelta(milliseconds=1)
local = (seconds + (j/(360/86400)))/1000
print (local)
if test<0:
break
test-=1
代码的测试部分只是确保我没有浪费时间做转换所有〜40万个数据点。所以总结一下,我想把UT中的datetime.time对象与相应的经度相结合,并将它转换为当地太阳时间作为datetime.time对象。
这一切似乎超级复杂,似乎应该有一个更简单的方法。任何帮助是极大的赞赏!谢谢!
答
我想通了,但它不漂亮。
localtimes = []
for (i,j) in zip(sattime, satloncor):
td = dt.datetime.combine(dt.datetime.min, i) - dt.datetime.min
seconds = td // dt.timedelta(seconds=1)
local = (seconds + (j/(360/86400)))/3600
if local>24:
local-=24
strip = [math.modf(local)[1],math.modf(local)[0]*60 ]
if strip[0]==24:
localtimes.append(dt.time(0, int(strip[1]),0))
else:
localtimes.append(dt.time(int(strip[0]), int(strip[1]),0))
答
对不起,但它超级复杂,因为它是一个复杂的主题。仅举一个例子,你知道每隔几年有86401秒的一天吗?
一对夫妇的好网站入手:
http://www.ephemeris.com/books.html
我可以推荐了“实践与天文学计算器”的书。
希望这有助于。