当前位置 博文首页 > 文章内容

    julian,Cesium中的JulianDate对象

    作者:zyd1113wz 栏目:网站相关 时间:2021-02-26 15:13:58

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



         一、JulianDate简介

         对于这个对象而言,刚一开始一直让我很困惑,因为我一时没搞明白它到底是怎么用的,也怪我当初没好好学JavaScript,其实JulianDate与JS中的Date是相同的。只不过可能前者的精度更为精确一些。

         (1)因为我个人是比较喜欢“比较”的,所以就先看一下JS中的Date类型,其是使用从UTC(Coordinated Universal Time,国际协调时间)1970年1月1日(零时)开始经过的毫秒数来保存日期的。使用这种格式Date类型可以保存的日期能够精确到1970年1月1日之前或之后的100000000天。

         (2)而JulianDate类型Cesium是这样解释的,“Represents an astronomical Julian date, which is the number of days since noon on January 1, -4712 (4713 BC). For increased precision, this class stores the whole number part of the date and the seconds part of the date in separate components. In order to be safe for arithmetic and represent leap seconds, the date is always stored in the International Atomic Time standard TimeStandard.TAI. ”,翻译过来就是代表天文朱利安日期,它是自4712年1月1日(公元前4713年)正午以来的天数。为了提高精度,该类存储的日期部分和秒数部分是分开的。并且为了算术安全和表示闰秒,该日期始终存储在国际原子时间标准中 (TimeStandard.TAI) 。而这其中的Julian可能我们会有些陌生,但是提起他的另一个名字“凯撒大帝”,我们应该就熟悉很多了,其有效的日期范围是从公元前4713年1月1日到公元9999年12月31日。

         二、JulianDate的使用

         1、构造形式

         new Cesium.JulianDate ( julianDayNumber , secondsOfDay , timeStandard )

         其中:julianDayNumber 是指整数天,因为是从公元前4713年开始计数的,所以这个数可能会很大;secondsOfDay 是指这一天过了多少秒;timeStandard则是指所用时间的标准,Cesium中主要有两种 Cesium.TimeStandard.TAI(国际原子时间标准)和Cesium.TimeStandard.UTC(协调世界时时间标准,这和JS中的时间标准是一样的)。

         2、简单使用

         创建JulianDate对象:

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">  

    <title>日期对象</title> 

    <script src="../js/jquery.min.js"></script> 

    <script src="../js/Sandcastle-header.js"></script> 

    <script src="../js/config.js"></script>

    <script type="text/javascript" src="../Build/Cesium/Cesium.js"></script>

    </head>

    <body>   

    <script>   

    var current=Cesium.JulianDate.now(new Date());       

     //var current=Cesium.JulianDate.fromDate(new Date());         //获取当前时间,由js中的UTC标准转换为TAI标准 

    console.log(current.dayNumber,current.secondsOfDay); 

    </script>

    </body>

    </html>

         添加时间:

    var addDays= Cesium.JulianDate.addDays(current,1,new Cesium.JulianDate());

    console.log("添加天数:",addDays.dayNumber,addDays.secondsOfDay);

    var addHours= Cesium.JulianDate.addHours(current,1,new Cesium.JulianDate());

    console.log("添加小时:",addHours.dayNumber,addHours.secondsOfDay);

    var addSeconds= Cesium.JulianDate.addSeconds(current,1,new Cesium.JulianDate());

    console.log("添加秒数:",addSeconds.dayNumber,addSeconds.secondsOfDay);

         其中,两个JulianDate类型的对象不能直接使用“-”符号进行相减,这一点不同于js中的Date对象。如果想要实现两个JulianDate类型相减,可以使用下面的函数:

    var diffDays=Cesium.JulianDate.daysDifference (addDays, addHours);

    console.log("相差天数:",diffDays);

    var diffSeconds= Cesium.JulianDate.secondsDifference(addHours,addSeconds);

    console.log("相差秒数:",diffSeconds);

         三、小结

         为什么要对JulianDate类型进行详细了解呢,这主要是因为之后的动态模型会经常的用到“时间”这一维的数据类型,这就要牵扯到Cesium中的property机制了。

         原文链接:https://blog.csdn.net/dayuhaitang1/article/details/107499742