calculateTrueSolarTime static method

DateTime calculateTrueSolarTime(
  1. DateTime dateTime,
  2. double longitude,
  3. double timeZoneOffset
)

计算真太阳时 dateTime - 需要计算的日期时间(本地时间) longitude - 观测点经度,单位为度(东经为正,西经为负) timeZoneOffset - 时区偏移(小时)

Implementation

static DateTime calculateTrueSolarTime(
  DateTime dateTime,
  double longitude,
  double timeZoneOffset,
) {
  // 计算年中的天数(从0开始)
  int dayOfYear = _calculateDayOfYear(dateTime);

  // 计算时差方程(分钟)
  double eot = _calculateEquationOfTime(dayOfYear);

  // 经度修正(分钟) - 每经度4分钟
  double longitudeCorrection = 4 * (longitude - (timeZoneOffset * 15));

  // 总时间修正(分钟)
  double totalCorrection = eot + longitudeCorrection;

  // 将分钟转换为毫秒
  int correctionMs = (totalCorrection * 60 * 1000).round();

  // 应用修正得到真太阳时
  return dateTime.add(Duration(milliseconds: correctionMs));
}