STK Components二次开发

STK组件基础篇:时间

2019-05-15  本文已影响0人  奔跑伯爵

1. 单位

STK组件采用国际单位制:

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

2. 时间和时间标准

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

2.1. 时间标准

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

名称 缩写 类型
世界时1 UT1 地球旋转时间
协调世界时 UTC 原子时间
GPS时间 GPS 原子时间
国际原子时 TAI 原子时间
地球时 TT 原子时间
质心动力学时 TDB 相对论动力学时间

2.2. JulianDate

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

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

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

2.3. Duration

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

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

2.4. GregorianDate

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

2.5. 时间转换

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

2.6. 示例

var dateTime = new DateTime(2019, 5, 20);
var jdUTC = new JulianDate(dateTime, TimeStandard.CoordinatedUniversalTime);
Console.WriteLine("时间:{0},儒略日:{1}", jdUTC, jdUTC.TotalDays);
var jdTAI = new JulianDate(dateTime, TimeStandard.InternationalAtomicTime);
 Console.WriteLine("时间:{0},儒略日:{1}", jdTAI, jdTAI.TotalDays);
var jdTT = new JulianDate(dateTime, TimeStandard.TerrestrialTime);
Duration diff = jdTT - TimeConstants.J2000;
Console.WriteLine("时间差:{0}天", diff.TotalDays);
JulianDate jdTAI2 = jdUTC.ToTimeStandard(TimeStandard.InternationalAtomicTime);
 Console.WriteLine("时间:{0},儒略日:{1}", jdTAI2, jdTAI2.TotalDays);
JulianDate jdUTC2 = TimeStandardConverter.Convert(jdTAI2, TimeStandard.CoordinatedUniversalTime);
Console.WriteLine("时间:{0},儒略日:{1}", jdUTC2, jdUTC2.TotalDays);
JulianDate jd = jdUTC.AddDays(7);
Console.WriteLine("时间:{0},儒略日:{1}", jd, jd.TotalDays);

源代码地址

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

上一篇 下一篇

猜你喜欢

热点阅读