STK组件基础篇:时间

作者: 奔跑伯爵 | 来源:发表于2019-05-15 21:45 被阅读0次

1. 单位

STK组件采用国际单位制:

物理量 单位 类型
时间 基本单位
长度 基本单位
质量 千克 基本单位
温度 开尔文 基本单位
角度 弧度 导出单位
频率 赫兹 导出单位
压力 帕斯卡 导出单位
功率 瓦特 导出单位

2. 时间和时间标准

我们日常生活中常用的是加了时区的协调世界时,在科学计算特别是天文方面的计算中,有多个时间标准。存在各种时间标准是为了解释地球相对于太阳自转的明显时间飘移,解释在不同参考架中观察到的相对论效应对时间飘移的影响。秒是用于表示时间量的基本计量单位。然而秒的定义取决于所使用的特定时间标准。

2.1. 时间标准

STK组件支持的时间标准如下表所示,所有这些时间标准都可以通过TimeStandard类的静态属性访问。

名称 缩写 类型
世界时1 UT1 地球旋转时间
协调世界时 UTC 原子时间
GPS时间 GPS 原子时间
国际原子时 TAI 原子时间
地球时 TT 原子时间
质心动力学时 TDB 相对论动力学时间
  • 不同时间标准的转换可使用TimeStandardConverter类的静态方法实现
  • 可通过创建TimeStandard的实例,实现自定义的时间标准

2.2. JulianDate

JulianDate是一个结构体,用来表示儒略日时间。它内部由三个字段组成:

  • 整数部分:int型,从公元前4713年1月1日起算的连续天数
  • 小数部分:double型,当天从0点起算的秒数
  • 时间标准:TimeStandard类型,当前实例的时间标准

每个JulianDate都有特定的时间标准,JulianDate有8种构造函数
,可在创建时指定时间标准,如果不直接指定,会使用默认的时间标准。

  • 默认采用UTC:
    • public JulianDate(DateTime dateTime)
    • public JulianDate(GregorianDate gregorianDate)
  • 默认采用TAI:
    • public JulianDate(double dayCount)
    • public JulianDate(int day, double secondsOfDay)
  • 指定时间标准:
    • public JulianDate(DateTime dateTime, TimeStandard standard)
    • public JulianDate(GregorianDate gregorianDate, TimeStandard standard)
    • public JulianDate(double dayCount, TimeStandard timeStandard)
    • public JulianDate(int day, double secondsOfDay, TimeStandard timeStandard)

不同的时间标准之间的转换可通过JulianDate.ToTimeStandard()实现。

2.3. Duration

Duration是一个结构体,表示持续时间。内部由三个字段组成:

  • 整数部分:int型,持续时间的天数
  • 小数部分:double型,扣除天数部分后,剩余持续时间的秒数
  • 时间标准:TimeStandard类型,当前实例的时间标准

JulianDate不同的是,Duration的时间标准不是必须指定的,如果没有指定,在与JulianDate运算时,会默认采用该JulianDate的时间标准。

2.4. GregorianDate

GregorianDate是一个结构体,表示公历中的日历日期,和C#中常用的DateTime类似。GregorianDate没有时间标准,它被假定为协调世界时(UTC)。如果秒值是从60到61,则表示为闰秒。
内部由YearMonthDay(结构体)、时(int)、分(int)、秒(double)组成

2.5. 时间转换

STK组件提供了一个名为TimeStandardConverter的静态类可进行时间标准转换:

  • public static JulianDate Convert(JulianDate value, TimeStandard to)
    转换给定的JulianDate到指定的时间标准
  • public static bool TryConvert(JulianDate value, TimeStandard to, out JulianDate result)
    尝试转换给定的JulianDate到指定的时间标准,成功返回true,失败返回false
  • public static void RegisterConversion(TimeStandard from, TimeStandard to, FormatConversionCallback<JulianDate, TimeStandard> conversion)
    注册自定义的时间转换方法,当自定义了一个时间标准时,这个方法很有用处

2.6. 示例

  • 时间转换为JulianDate的协调世界时(UTC)
var dateTime = new DateTime(2019, 5, 20);
var jdUTC = new JulianDate(dateTime, TimeStandard.CoordinatedUniversalTime);
Console.WriteLine("时间:{0},儒略日:{1}", jdUTC, jdUTC.TotalDays);
  • 时间转换为JulianDate的国际原子时(TAI)
var jdTAI = new JulianDate(dateTime, TimeStandard.InternationalAtomicTime);
 Console.WriteLine("时间:{0},儒略日:{1}", jdTAI, jdTAI.TotalDays);
  • 与J2000时刻的时间差
var jdTT = new JulianDate(dateTime, TimeStandard.TerrestrialTime);
Duration diff = jdTT - TimeConstants.J2000;
Console.WriteLine("时间差:{0}天", diff.TotalDays);
  • 利用JulianDate.ToTimeStandard()转换时间标准:UTC转为TAI
JulianDate jdTAI2 = jdUTC.ToTimeStandard(TimeStandard.InternationalAtomicTime);
 Console.WriteLine("时间:{0},儒略日:{1}", jdTAI2, jdTAI2.TotalDays);
  • 利用TimeStandardConverter.Convert()转换时间标准:TAI转UTC
JulianDate jdUTC2 = TimeStandardConverter.Convert(jdTAI2, TimeStandard.CoordinatedUniversalTime);
Console.WriteLine("时间:{0},儒略日:{1}", jdUTC2, jdUTC2.TotalDays);
  • JulianDate加上指定天数
JulianDate jd = jdUTC.AddDays(7);
Console.WriteLine("时间:{0},儒略日:{1}", jd, jd.TotalDays);

源代码地址

https://github.com/icgp/STKComponentsTutorial/blob/master/Example003/Example003.cs

相关文章

  • STK组件基础篇:时间

    1. 单位 STK组件采用国际单位制: 2. 时间和时间标准 我们日常生活中常用的是加了时区的协调世界时,在科学计...

  • STK组件基础篇:开发入门

    本文及后续系列文章主要采用STK组件的.Net版本作为开发包。 1. 获取开发包 正常的获取途径是访问AGI官网,...

  • STK组件基础篇:外部数据

    为了能使计算更加准确,需要在STK组件中引入一些外部数据,例如跳秒数据、地球自转参数(EOP)等。AGI的官方FT...

  • STK组件模式:求值器Evaluator

    STK组件在整个库中广泛使用“求值器模式”。STK组件中的任何计算几乎都使用了求值器模式。求值器通常表示时间的函数...

  • STK组件基础篇:坐标与旋转

    AGI.Foundation.Coordinates命名空间中提供了各种平移和旋转坐标类型。这些类型提供了以通用n...

  • STK组件基础篇:三维入门

    上篇文章介绍了如何在控制台程序中调用STK组件开发包,这篇文章将介绍如何在窗体程序中嵌入Insight3D模块,显...

  • STK组件功能简介

    STK Components(后续直译为STK组件)提供两个版本的算法库:Java版和.Net版,功能完全一致,其...

  • 黄医生需要商品清单

    stk.1 preis 40 Euro stk.1 preis 35 Euro stk.4 ...

  • Flutter - UI基础

    Flutter基础组件用Flutter构建漂亮的UI界面 - 基础组件篇Flutter滚动型容器组件 - List...

  • Android4.4 STK与CatService-Stk应用详

    一、Stk应用简介 安卓源码packages/apps/Stk目录Stk是全称Sim Tool Kit,即用户识别...

网友评论

    本文标题:STK组件基础篇:时间

    本文链接:https://www.haomeiwen.com/subject/fzipaqtx.html