如何在 UT 中获取 datetime.time 对象并在给定经度的情况下转换为本地时间

How to take a datetime.time object in UT and convert to local time given a longitude

我需要将 UT 时间与经度相结合转换为本地时间。我正在分析未来的地球观测卫星任务,需要进行这种转换才能继续。

我找到了这个问题的一般解决方案 here:T(lt) = T(ut) + lon/(360/24),但是实施它让我非常疯狂。

我的数据是日期时间对象:

In[9]: sattime[0] 
Out[9]: datetime.time(18, 0)

经度坐标从 0 到 360 度。

我需要拿这个对象并使用上面的等式转换为本地时间。我只关心相对于午夜的时间而不关心日期(事实上,我的其余代码当前仅使用 datetime.time 对象,并且本地时间输出最好是同一类型的对象)。

我已经尝试了 中的以下方法,但我无法将局部变量返回到时间对象中。

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

代码的测试部分只是确保我没有浪费时间对所有 ~400,000 个数据点进行转换。

总而言之,我想取一个UT中的datetime.time对象加上相应的经度,并将其转换为地方太阳时作为datetime.time对象。

这一切看起来非常复杂,似乎应该有更简单的方法。任何帮助是极大的赞赏!谢谢!

抱歉,它非常复杂,因为它是一个复杂的主题。举个例子,你知道每隔几年就有一天有 86401 秒吗?

几个不错的网站开始:

http://www.ephemeris.com/books.html

我可以推荐 "Practical Astronomy with your Calculator" 这本书。

https://www.timeanddate.com/

希望对您有所帮助。

我想出来了,但它并不漂亮。

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))