• 大小: 23KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: C#
  • 标签: C#  日出  日落  日没  

资源简介

本代码已经在项目中应用。 压缩包里附送 日升日落时间计算(2.0版).xls

资源截图

代码片段和文件信息

using System;


namespace Tools.TimeAbout
{
    /// 
    /// 日出日落时间类
    /// 

    public static class SunTimes
    {
        #region 公共方法
        /// 
        /// 计算日长
        /// 

        /// 日期
        /// 经度
        /// 纬度
        /// 日长
        /// 
        /// 注:日期最小为2000.1.1号
        /// 

        public static double GetDayLength(DateTime date double longitude double latitude)
        {
            double result = DayLen(date.Year date.Month date.Day longitude latitude -35.0 / 60.0 1);
            return result;
        }

        /// 
        /// 计算日出日没时间
        /// 

        /// 日期
        /// 经度
        /// 纬度
        /// 日落日出时间
        /// 
        /// 注:日期最小为2000.1.1号
        /// 

        public static SunTimeResult GetSunTime(DateTime date double longitude double latitude)
        {
            double start = 0;
            double end = 0;
            SunRiset(date.Year date.Month date.Day longitude latitude -35.0 / 60.0 1 ref start ref end);
            DateTime sunrise = ToLocalTime(date start);
            DateTime sunset = ToLocalTime(date end);
            return new SunTimeResult(sunrise sunset);
        }
        #endregion

        #region 私有方法

        #region 时间转换
        private static DateTime ToLocalTime(DateTime time double utTime)
        {
            int hour = Convert.ToInt32(Math.Floor(utTime));
            double temp = utTime - hour;
            hour += 8;//转换为东8区北京时间
            temp = temp * 60;
            int minute = Convert.ToInt32(Math.Floor(temp));
            try
            {
                return new DateTime(time.Year time.Month time.Day hour minute 0);
            }
            catch
            {
                return new DateTime(time.Year time.Month time.Day 0 0 0);
            }
        }
        #endregion

        #region 与日出日落时间相关计算
        private static double DayLen(int year int month int day double lon double lat
            double altit int upper_limb)
        {
            double d  /* Days since 2000 Jan 0.0 (negative before) */
                obl_ecl    /* Obliquity (inclination) of Earth‘s axis */
                //黄赤交角,在2000.0历元下国际规定为23度26分21.448秒,但有很小的时间演化。

                sr         /* Solar distance astronomical units */
                slon       /* True solar longitude */
                sin_sdecl  /* Sine of Sun‘s declination */
                //太阳赤纬的正弦值。
                cos_sdecl  /* Cosine of Sun‘s declination */
                sradius    /* Sun‘s apparent radius */
                t;          /* Diurnal arc */

            /* Compute 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       14797  2010-06-12 23:33  SunTimes.cs
     文件      199680  2014-05-04 17:43  日升日落时间计算(2.0版).xls

评论

共有 条评论