如何使用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

我可以推荐了“实践与天文学计算器”的书。

https://www.timeanddate.com/

希望这有助于。