黄学彪
2020-04-08 4dce704aaf8587cf3f91cf88f2208315a03c4cbb
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/TimeSettignPage.cs
@@ -27,7 +27,7 @@
                            var dataReport = tempDevice.DeviceStatusReport.AttriBute[0];
                            if (tempDevice.DeviceStatusReport.CluterID == 10 && dataReport.AttributeId == 0)
                            {
                                CurentDoorLockTime = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetLocalTime(dataReport.AttriButeData);
                                CurentDoorLockTime = DoorLockCommonInfo.GetLocalTime(dataReport.AttriButeData);
                                Application.RunOnMainThread(() =>
                                {
                                    waitGetDoorLockTime = DateTime.MaxValue;
@@ -60,6 +60,8 @@
            this.doorLock = doorLock;
            setTimeType = timeType;
            BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor;
            //读门锁时区时间
            DoorLockCommonInfo.GetDoorLockZoneTime();
            ZigBee.Device.ZbGateway.StatusList.Add(this);
        }
        #endregion
@@ -180,7 +182,7 @@
            };
            this.midFrameLayout.AddChidren(midTopFrameLayout);
            var dtNow = DateTime.Now;
            var dtNow = DoorLockCommonInfo.DoorlockZoneTime;// DateTime.Now;
            for (int i = 0; i < 2; i++)
            {
                #region MidTopFrameLayout UI
@@ -370,6 +372,7 @@
        /// <summary>
        /// 添加【门锁时间】行(门锁专用)
        /// </summary>
        /// <param name="zoneFrameLayout"></param>
        private void AddDoorLocksTimeRow(FrameLayout zoneFrameLayout)
        {
            //门锁时间
@@ -405,11 +408,17 @@
                TextColor = Shared.Common.ZigbeeColor.Current.XMGray4,
                TextSize = 14,
            };
            rowLayout.AddChidren(textZone);
            textZone.Text = zoneData();
            textZone.MouseDownEventHandler += (sender, e) =>
            {
                //GetSpecificZoneNowDate();
                //1、入网后先获取门锁在网关中的时区时间
                var curDateTime = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetDoorLockZoneTime();
                //2、将时间设置到网关中
                var dateTime = new DateTime(curDateTime.Year, curDateTime.Month, curDateTime.Day, curDateTime.Hour, curDateTime.Minute, curDateTime.Second);
                var setTimestamp = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetUnixTimeStamp(dateTime);
                doorLock.RectifyDoorLockTimeAsync(int.Parse(setTimestamp));
            };
            var btnLine = new FrameLayout()
@@ -430,24 +439,86 @@
        private string zoneData()
        {
            string zoneText = "";
            var gwZone = caculateTimeZone(Common.Config.Instance.Home.Longitude);
            int num = 0;
            var gwZone = DoorLockCommonInfo.CaculateTimeZone(Common.Config.Instance.Home.Longitude);
            if (int.Parse(gwZone) != 0)
            {
                num = int.Parse(gwZone.Substring(1));
            }
            if (gwZone.Contains('+'))
            {
                zoneText = Language.StringByID(R.MyInternationalizationString.East);
                zoneText = EastZoneList(num - 1);
            }
            else if (gwZone.Contains('-'))
            {
                zoneText = WestZoneList(num - 1);
            }
            else
            {
                zoneText = Language.StringByID(R.MyInternationalizationString.West);
                zoneText = Language.StringByID(R.MyInternationalizationString.CurZoneText0);
            }
            var num = ToNum(int.Parse(gwZone));
            return zoneText += num + Language.StringByID(R.MyInternationalizationString.CurZoneText);
            return zoneText;
        }
        /// <summary>
        /// 转换东区
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        private string EastZoneList(int x)
        {
            var numString = new string[]
            {
                Language.StringByID(R.MyInternationalizationString.CurZoneText1),
                Language.StringByID(R.MyInternationalizationString.CurZoneText2),
                Language.StringByID(R.MyInternationalizationString.CurZoneText3),
                Language.StringByID(R.MyInternationalizationString.CurZoneText4),
                Language.StringByID(R.MyInternationalizationString.CurZoneText5),
                Language.StringByID(R.MyInternationalizationString.CurZoneText6),
                Language.StringByID(R.MyInternationalizationString.CurZoneText7),
                Language.StringByID(R.MyInternationalizationString.CurZoneText8),
                Language.StringByID(R.MyInternationalizationString.CurZoneText9),
                Language.StringByID(R.MyInternationalizationString.CurZoneText10),
                Language.StringByID(R.MyInternationalizationString.CurZoneText11),
                Language.StringByID(R.MyInternationalizationString.CurZoneText12)
            };
            var strChnNamesList = new List<string>(numString);
            return strChnNamesList[x];
        }
        /// <summary>
        /// 转换西区
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        private string WestZoneList(int x)
        {
            var numString = new string[]
            {
                Language.StringByID(R.MyInternationalizationString.WestZoneText1),
                Language.StringByID(R.MyInternationalizationString.WestZoneText2),
                Language.StringByID(R.MyInternationalizationString.WestZoneText3),
                Language.StringByID(R.MyInternationalizationString.WestZoneText4),
                Language.StringByID(R.MyInternationalizationString.WestZoneText5),
                Language.StringByID(R.MyInternationalizationString.WestZoneText6),
                Language.StringByID(R.MyInternationalizationString.WestZoneText7),
                Language.StringByID(R.MyInternationalizationString.WestZoneText8),
                Language.StringByID(R.MyInternationalizationString.WestZoneText9),
                Language.StringByID(R.MyInternationalizationString.WestZoneText10),
                Language.StringByID(R.MyInternationalizationString.WestZoneText11),
                Language.StringByID(R.MyInternationalizationString.WestZoneText12)
            };
            var strChnNamesList = new List<string>(numString);
            return strChnNamesList[x];
        }
        /// <summary>
        /// 获取时区
        /// <para>currentLon:"+"为东区,“-”为西区</para>
        /// </summary>
        public static String caculateTimeZone(double currentLon)
        /// <param name="currentLon"></param>
        /// <returns></returns>
        public static String CaculateTimeZone(double currentLon)
        {
            int timeZone;
            int shangValue = (int)(currentLon / 15);
@@ -464,58 +535,17 @@
        }
        /// <summary>
        /// 转换数字
        /// 获取所在时区的时间
        /// </summary>
        private string ToNum(int x)
        /// <param name="unix"></param>
        /// <returns></returns>
        public static int GetLocalTime(int unix)
        {
            var numString = new string[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };
            var strChnNamesList = new List<string>(numString);
            return strChnNamesList[x];
            var gwZone = CaculateTimeZone(Common.Config.Instance.Home.Longitude);
            var data = unix + 8 * 3600;
            return data;
        }
        //如何显示时区所在的时间
        public DateTime GetSpecificZoneNowDate(string zoneName = "")
        {
            DateTime curZoneDateTime;
            // 列举所有支持的时区列表
            System.Collections.ObjectModel.ReadOnlyCollection<TimeZoneInfo> lst = TimeZoneInfo.GetSystemTimeZones();
            foreach (TimeZoneInfo tzi in lst)
            {
                var aa = tzi;
                var aa1 = tzi.Id;
            }
            GetSpecificZoneNowDate1();
            zoneName = "Central America Standard Time";//美国
            //将本地时间转换为美国标准中部时间
            DateTime dt = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now, TimeZoneInfo.Local);
            curZoneDateTime = TimeZoneInfo.ConvertTimeFromUtc(dt, TimeZoneInfo.FindSystemTimeZoneById(zoneName));
            zoneName = "China Standard Time";//中国
            //首先将服务器的时间转化为utc时间,
            var utcdate = DateTime.Now.ToUniversalTime();
            //然后转换成指定时区的日期
            TimeZoneInfo beiJingZone = TimeZoneInfo.FindSystemTimeZoneById(zoneName);
            curZoneDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcdate, beiJingZone);
            return curZoneDateTime;
        }
        public void GetSpecificZoneNowDate1()
        {
            // Get time in local time zone
            DateTime thisTime = DateTime.Now;
            Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(thisTime) ?
                              TimeZoneInfo.Local.DaylightName : TimeZoneInfo.Local.StandardName, thisTime);
            Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(thisTime, TimeZoneInfo.Local));
            // Get Tokyo Standard Time zone
            TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
            DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);
            Console.WriteLine("Time in {0} zone: {1}", TimeZoneInfo.Local.IsDaylightSavingTime(tstTime) ?
                              tst.DaylightName : tst.StandardName, tstTime);
            Console.WriteLine("   UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));
        }
        #endregion
@@ -559,7 +589,7 @@
                try
                {
                    var curDateTime = new DateTime(curYear, curMonth, curDay, curHour, curMin, curSec);
                    var setTimestamp = Shared.Phone.UserCenter.DoorLock.DoorLockCommonInfo.GetUnixTimeStamp(curDateTime);
                    var setTimestamp = DoorLockCommonInfo.GetUnixTimeStamp(curDateTime);
                    Application.RunOnMainThread(() =>
                    {
                        CommonPage.Loading.Start("");
@@ -701,17 +731,19 @@
                            string nowValue2 = dtNow.Year.ToString() + curMonth.ToString().PadLeft(2, '0') + curDay.ToString().PadLeft(2, '0');
                            if (nowValue1.CompareTo(nowValue2) == 1)
                            {
                                this.ShowMassage(ShowMsgType.Error, "生效日期不能大于当前日期");
                                var mess = Language.StringByID(R.MyInternationalizationString.ValidTimeNoLessThanCurrentTime);
                                this.ShowMassage(ShowMsgType.Error, mess);
                                return;
                            }
                            //检查时间
                            var flage = this.CheckValidTime(dtNow.Year, curMonth, curDay,
                            var flage = this.CheckValidTime(dtNow.Year, curMonth, curDay,
                                DoorLockCommonInfo.ValidDateHour, DoorLockCommonInfo.ValidDateMinute, DoorLockCommonInfo.ValidDateSecond,
                                DoorLockCommonInfo.InValidDateYear, DoorLockCommonInfo.InValidDateMonth, DoorLockCommonInfo.InValidDateDay,
                                DoorLockCommonInfo.InValidDateHour, DoorLockCommonInfo.InValidDateMinute, DoorLockCommonInfo.InValidDateSecond);
                            if (flage == false)
                            {
                                this.ShowMassage(ShowMsgType.Error, "生效时间不能小于失效时间");
                                var mess = Language.StringByID(R.MyInternationalizationString.ValidTimeNoMoreThanInValidTime);
                                this.ShowMassage(ShowMsgType.Error, mess);
                                return;
                            }
                            DoorLockCommonInfo.ValidDateYear = dtNow.Year;
@@ -721,13 +753,14 @@
                        else
                        {
                            //检查时间
                            var flage = this.CheckValidTime(DoorLockCommonInfo.ValidDateYear, DoorLockCommonInfo.ValidDateMonth, DoorLockCommonInfo.ValidDateDay,
                            var flage = this.CheckValidTime(DoorLockCommonInfo.ValidDateYear, DoorLockCommonInfo.ValidDateMonth, DoorLockCommonInfo.ValidDateDay,
                                DoorLockCommonInfo.ValidDateHour, DoorLockCommonInfo.ValidDateMinute, DoorLockCommonInfo.ValidDateSecond,
                                dtNow.Year, curMonth, curDay,
                                DoorLockCommonInfo.InValidDateHour, DoorLockCommonInfo.InValidDateMinute, DoorLockCommonInfo.InValidDateSecond);
                            if (flage == false)
                            {
                                this.ShowMassage(ShowMsgType.Error, "失效时间不能大于生效时间");
                                var mess = Language.StringByID(R.MyInternationalizationString.InvalidTimeNoLessThanValidTime);
                                this.ShowMassage(ShowMsgType.Error, mess);
                                return;
                            }
@@ -806,7 +839,39 @@
                    }
                    else
                    {
                        curYear = y + 2009;
                        switch (y)
                        {
                            case 0:
                                curYear = dtNow.Year - 9;
                                break;
                            case 1:
                                curYear = dtNow.Year - 8;
                                break;
                            case 2:
                                curYear = dtNow.Year - 7;
                                break;
                            case 3:
                                curYear = dtNow.Year - 6;
                                break;
                            case 4:
                                curYear = dtNow.Year - 5;
                                break;
                            case 5:
                                curYear = dtNow.Year - 4;
                                break;
                            case 6:
                                curYear = dtNow.Year - 3;
                                break;
                            case 7:
                                curYear = dtNow.Year - 2;
                                break;
                            case 8:
                                curYear = dtNow.Year - 1;
                                break;
                            default:
                                curYear = dtNow.Year;
                                break;
                        }
                        curMonth = m + 1;
                        curDay = d + 1;
                    }
@@ -904,14 +969,14 @@
                    {
                        if (setTimeType == "ValidTime")
                        {
                            //检查时间
                            var flage = this.CheckValidTime(DoorLockCommonInfo.ValidDateYear, DoorLockCommonInfo.ValidDateMonth, DoorLockCommonInfo.ValidDateDay,
                                curHour, curMin, curSec,
                                DoorLockCommonInfo.InValidDateYear, DoorLockCommonInfo.InValidDateMonth, DoorLockCommonInfo.InValidDateDay,
                                DoorLockCommonInfo.InValidDateHour, DoorLockCommonInfo.InValidDateMinute, DoorLockCommonInfo.InValidDateSecond);
                            if (flage == false)
                            {
                                this.ShowMassage(ShowMsgType.Error, "失效时间不能大于生效时间");
                                var mess = Language.StringByID(R.MyInternationalizationString.ValidTimeNoMoreThanInValidTime);
                                this.ShowMassage(ShowMsgType.Error, mess);
                                return;
                            }
@@ -928,7 +993,8 @@
                                curHour, curMin, curSec);
                            if (flage == false)
                            {
                                this.ShowMassage(ShowMsgType.Error, "失效时间不能大于生效时间");
                                var mess = Language.StringByID(R.MyInternationalizationString.InvalidTimeNoLessThanValidTime);
                                this.ShowMassage(ShowMsgType.Error, mess);
                                return;
                            }
@@ -968,7 +1034,7 @@
            + inValidHour.ToString().PadLeft(2, '0')
            + inValidMinute.ToString().PadLeft(2, '0')
            + inValidSecond.ToString().PadLeft(2, '0');
            var aaaa = nowValue1.CompareTo(nowValue2);
            if (nowValue1.CompareTo(nowValue2) == 1)
            {
                return false;