cvccvccv 发表于 2010-11-1 18:46:22

管理员来看看咯,, 时间戳问题

destoon时间戳问题
为什么我用c#调用时间戳方法跟系统的时间戳方法系统获取我设置的时间戳 怎么会差了1天多

class Program
    {
      //定义必须变量
      const int _1M = 60;                     //分钟
      const int _1H = _1M * 60;               //小时
      const int _1D = _1H * 24;               //天
      const long _1Y = _1D * 365;             //年(非闰年)
      const long _YS = _1Y * 3 + _1D * 366;   //一个闰年年度
      const long _30D = _1D * 30;             //30天(月)
      const long _31D = _1D * 31;             //31天(月)
      const long _28D = _1D * 28;             //28天(月)
      const long _29D = _1D * 29;             //29天(月)
      long[] NormalYear = { _31D, _28D, _31D, _30D, _31D, _30D, _31D, _31D, _30D, _31D, _30D, _31D };   //年
      long[] LeapYear = { _31D, _29D, _31D, _30D, _31D, _30D, _31D, _31D, _30D, _31D, _30D, _31D };       //闰年

      static void Main(string[] args)
      {
            Program P = new Program();
            System.Console.WriteLine(P.getDate(P.getTimeSpame()));
            DateTime T = DateTime.Now;
            System.Console.WriteLine(P.getTimeSpame() + " : " + P.getTimeSpame(T.Year, T.Month, T.Day, T.Hour, T.Minute, T.Second));
            System.Console.ReadKey();
      }
      private Program() {}
      public string getDate(long TimeSp)
      {
            //年,月,天,小时,分钟,秒
            int year = 0;
            int month = 0;
            int day = 0;
            int hour = 0;
            int minute = 0;
            int second = 0;
            //DateTime now = DateTime.Now;
            //long TimeSp = getTimeSpame();       //当前时间戳
            //年
            int _y1 = (int)(TimeSp / _YS);                  //获得按年度得到的年度
            TimeSp -= _YS * _y1;                            //计算剩余秒
            int _y2 = (int)(TimeSp / _1Y);                  //剩余年
            TimeSp -= _1Y * _y2;
            year = _y1 * 4 + _y2 + 1970;
            //月
            long[] YearArr = isLeapYear(year) ? LeapYear : NormalYear;//获取年的月度表
            month = 1;                        //从1月开始计算
            for (int i = 0; i < YearArr.Length; i++)
            {
                if (TimeSp - YearArr < 0) break;
                ++month;
                TimeSp -= YearArr;
            }
            //天
            day = (int)(TimeSp / _1D);
            TimeSp -= day * _1D;
            //时
            hour = (int)(TimeSp / _1H);
            TimeSp -= hour * _1H;
            //分
            minute = (int)(TimeSp / _1M);
            //秒
            second = (int)(TimeSp % _1M);

            string DateStr = year + "年" + month + "月" + day + "日 " + hour + "点" + minute + "分" + second + "秒";
            return DateStr;
      }
      //判断是否闰年
      private bool isLeapYear(int year)
      {
            return (year % 4 == 0 ? true : false);
      }
      //获取当前时间戳 按1970年开始计算,精度为秒!
      private long getTimeSpame()
      {
            DateTime _Now = DateTime.Now;
            DateTime _1970 = new DateTime(1970, 1, 1);
            long _Sp = (_Now.Ticks - _1970.Ticks) / 10000000;
            return _Sp;
      }

      //按既定格式把时间转成成时间戳
      private long getTimeSpame(int Year, int Month, int Day, int Hour, int Minute, int Second)
      {
            long val = 0;
            val += Second;      //秒
            val += Minute * _1M;         //分钟
            val += Hour * _1H;         //小时
            val += Day * _1D;         //天
            long[] YearArr = isLeapYear(Year) ? LeapYear : NormalYear;
            for (int i = 0; i < Month - 1; i++)
            {
                val += YearArr;
            }
            Year -= 1970;
            val += (Year / 4) * _YS;
            Year -= (int)(Year / 4) * 4;
            val += Year * _1Y;
            return val;
      }
    }



destoon时间戳问题

为什么我用c#调用时间戳方法跟系统的时间戳方法系统获取我设置的时间戳 怎么会差了1天多



cvccvccv 发表于 2010-11-2 09:17:28


管理帮忙解决下咯....

cvccvccv 发表于 2010-11-2 15:07:33


可能是时区的问题
国内服务器一般默认是北京时间 +8区
页: [1]
查看完整版本: 管理员来看看咯,, 时间戳问题