destoon采集论坛

 找回密码
 立即注册
查看: 109|回复: 2

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

[复制链接]

2

主题

2

回帖

14

积分

新手上路

Rank: 1

积分
14
发表于 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天多


[color=]
回复

使用道具 举报

2

主题

2

回帖

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2010-11-2 09:17:28 | 显示全部楼层

管理  帮忙解决下咯....
回复 支持 反对

使用道具 举报

2

主题

2

回帖

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2010-11-2 15:07:33 | 显示全部楼层

可能是时区的问题
国内服务器一般默认是北京时间 +8区
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|destoon采集论坛

GMT+8, 2025-11-23 11:42 , Processed in 0.017998 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表