当前位置:  开发笔记 > 编程语言 > 正文

将unix时间戳转换为julian

如何解决《将unix时间戳转换为julian》经验,为你挑选了2个好方法。

如何从unix时间戳(例如1232559922)转换为小数julian日期(2454853.03150).

我找到了一个网站(http://aa.usno.navy.mil/data/docs/JulianDate.php)执行类似的计算,但我需要以编程方式进行.

解决方案可以是C/C++,python,perl,bash等......



1> Jason Cohen..:

Unix纪元(零点)是格林尼治标准时间1970年1月1日.这相当于2440587.5的朱利安日

所以,在伪代码中:

function float getJulianFromUnix( int unixSecs )
{
   return ( unixSecs / 86400.0 ) + 2440587.5;
}


你最后忘记了.5.增加的常数应为2440587.5

2> scottb..:

我知道这是一个老帖子,但我只想说......

Jason Cohen给出的答案是转换的一个很好的近似值.

但是存在一个问题,即与一天中的秒数有关.一天不是 - 完全 - 86400秒长,并且为了使时间与各种可观察标准保持同步,周期性地增加几天.这些被称为Leap Seconds(https://en.wikipedia.org/wiki/Leap_second).闰秒被添加到UTC,以使其保持在UT1的1秒内.

可以理解的是,随着自1970年1月1日以来越来越多的时间过去,上面的简单转换将从"实际可观察​​时间"中产生越来越多的错误.在1972年至2013年间,增加了25个闰秒.

朱利安日数字的美丽和简洁的一部分是它们根本不代表日期字符串.它们只是自Julian Epoch开始以来经过的时间的计数,就像POSIX时间是自POSIX Epoch以来的连续毫秒数.那么,存在的唯一问题是当您尝试将Julian Day编号映射到本地化的日期字符串时.

如果您需要一个精确到一分钟内的日期字符串(在2013年),那么您将需要一个可以计算闰秒的算法.


我认为Unix/Posix时间忽略了闰秒,因此Jason Cohen的算法不会随着闰秒累积而漂移.请参见http://en.wikipedia.org/wiki/Unix_time#Leap_seconds.如果我误解了事情,请直截了当地告诉我.
推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有