c#获取真太阳时间 电脑版发表于:2025/5/21 21:56  ># c#通过经纬度获取真太阳时间 [TOC] 什么是真太阳时间? ------------ tn2>真太阳时间是以太阳真实在你头顶经过子午线(中天)作为“正午”的时间系统。它反映的是太阳每天的真实运行状态,不受时区和人为标准时间影响。 它依赖于: 你所在的 经纬度 当前的 时间 地球的轨道偏心率和自转速度(引入“均时差”) 中国经纬度 ------------ tn2>这里我给大家分享了全国各个地方的经纬度,里面是一个`FullChinaCitys.json`。 链接: https://pan.baidu.com/s/18tDRyXTNN3iCqxTFRUolTw?pwd=2a7u 提取码: 2a7u  安装 Astronomy Engine ------------ tn2>Astronomy Engine 是一个跨平台的开源天文计算库,支持 .NET。 在你的项目目录下安装 NuGet 包:  tn2>C# 代码实现 ```csharp // 你的数据:经纬度 + 时间 //double latitude = 39.9042; // 例如:北京 //double longitude = 116.4074; double latitude = 29.299462; // 这里我以我出生地彭水为例子 double longitude = 108.172578; double height = 0.0; // 海拔(单位米) DateTime inputTime = DateTime.Parse("2024-04-28 00:56:00"); // 写上我的出生时间 // 创建观察者 Observer observer = new Observer(latitude, longitude, height); // 创建 AstroTime 对象 AstroTime astroTime = new AstroTime(inputTime); // 计算太阳的时角(Hour Angle) double hourAngle = Astronomy.HourAngle(Body.Sun, astroTime, observer); // 转换成真太阳时间(小时) double solarTime = (hourAngle + 12.0) % 24.0; // 转换成 hh:mm:ss int millis = (int)Math.Round(solarTime * 3.6e+6); int seconds = millis / 1000; millis %= 1000; int minutes = seconds / 60; seconds %= 60; int hours = minutes / 60; minutes %= 60; hours %= 24; // 输出 Debug.WriteLine($"?? 真太阳时 = {solarTime:F4} 小时 ({hours:00}:{minutes:00}:{seconds:00}.{millis:000})"); ``` tn2>运行结果如下: 