如何在 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" 这本书。
希望对您有所帮助。
我想出来了,但它并不漂亮。
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))
我需要将 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" 这本书。
希望对您有所帮助。
我想出来了,但它并不漂亮。
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))