wxr
2021-07-01 43b0d5870d528f23ecd6aeceb6cfd4325188b46f
HDL_ON/Common/Utlis.cs
@@ -1,19 +1,430 @@
using System;
namespace HDL_ON.Common
using Shared;
using System.Text.RegularExpressions;
using System.Text;
namespace HDL_ON
{
    /// <summary>
    /// 常用工具类
    /// </summary>
    public class Utlis
    public static class Utlis
    {
        /// <summary>
        /// 全局打印
        /// </summary>
        public static void WriteLine(object mes)
      /// <summary>
      /// 全局打印
      /// </summary>
      public static void WriteLine(object mes)
        {
#if DEBUG
            Console.WriteLine(mes);
#endif
        }
    }
        /// <summary>
        /// 弹窗提示
        /// </summary>
        /// <param name="mes"></param>
        public static void ShowAlertOnMainThread(string mes)
        {
            Application.RunOnMainThread(() => {
                new Alert("", mes, Language.StringByID(StringId.Close)).Show();
            });
        }
      /// <summary>
      /// ShowTip
      /// </summary>
      /// <param name="mes"></param>
      /// <param name="closeTime">关闭时间</param>
      public static void ShowTip(String mes, int closeTime = 2)
      {
         var tip = new Tip()
         {
            Text = mes,
            CloseTime = closeTime,
            MaxWidth = Application.GetRealWidth(300),
            Direction = AMPopTipDirection.None
         };
         tip.Show(MainPage.BaseView);
      }
      #region ■ 各种正则检测_______________________
      /// <summary>
      /// 用于中国大陆验证手机号正则表达式
      /// 以1开头,11位
      /// </summary>
      public static string PhoneRegexStr = "^[1][0-9]{10}$";
      /// <summary>
      /// 用于验证非中国大陆手机号正则表达式
      /// </summary>
      public static string PhoneForForeignRegexStr = "^[0-9]*$";
      /// <summary>
      /// 用于验证邮箱正则表达式
      /// </summary>
      public static string EmailRegexStr = "^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$";
      /// <summary>
      /// 判断是否包含大写字母
      /// </summary>
      /// <returns><c>true</c>, if contain upper was checked, <c>false</c> otherwise.</returns>
      /// <param name="value">Value.</param>
      public static bool CheckContainUpper(string value)
      {
         Regex reg = new Regex("[A-Z]+");
         return reg.IsMatch(value);
      }
      /// <summary>
      /// 判断是否包含小写字母
      /// </summary>
      /// <returns><c>true</c>, if contain lower was checked, <c>false</c> otherwise.</returns>
      /// <param name="value">Value.</param>
      public static bool CheckContainLower(string value)
      {
         Regex reg = new Regex("[a-z]+");
         return reg.IsMatch(value);
      }
      /// <summary>
      /// 判断是否包含数字
      /// </summary>
      /// <returns><c>true</c>, if contain lower was checked, <c>false</c> otherwise.</returns>
      /// <param name="value">Value.</param>
      public static bool CheckContainNum(string value)
      {
         Regex reg = new Regex("[0-9]+");
         return reg.IsMatch(value);
      }
      /// <summary>
      /// 判断是否包含符号
      /// </summary>
      /// <returns><c>true</c>, if contain lower was checked, <c>false</c> otherwise.</returns>
      /// <param name="value">Value.</param>
      public static bool CheckContainSymbol(string value)
      {
         Regex reg = new Regex("([^a-z0-9A-Z])+");
         return reg.IsMatch(value);
      }
      /// <summary>
      /// 检测邮箱是否合法
      /// </summary>
      /// <param name="email"></param>
      /// <returns></returns>
      public static bool CheckEmail(string email)
      {
         Regex reg = new Regex(EmailRegexStr);
         return reg.IsMatch(email);
      }
      /// <summary>
      /// 检测手机号是否合法
      /// </summary>
      /// <param name="phoneNumber">手机号</param>
      /// <param name="areaCode">地区代码</param>
      /// <returns></returns>
      public static bool CheckPhoneNumber(string phoneNumber, string areaCode)
      {
         //校验外国手机号
         if (areaCode != "86")
         {
            Regex reg = new Regex(PhoneForForeignRegexStr);
            return reg.IsMatch(phoneNumber);
            }
            else
            {
            //校验国内手机号
            Regex reg = new Regex(PhoneRegexStr);
            return reg.IsMatch(phoneNumber);
         }
      }
      #endregion
      /// <summary>
      /// TextButton
      /// 根据文本,计算按钮它实际的宽度
      /// </summary>
      /// <param name="btn"></param>
      /// <param name="extendWidth">补充宽度</param>
      /// <returns></returns>
      public static int GetRealWidthByTextButton(Button btn, int extendWidth = 1)
      {
         if (string.IsNullOrEmpty(btn.Text)) { return Application.GetRealWidth(extendWidth); }
         return btn.GetTextWidth() + Application.GetRealWidth(extendWidth);
      }
      /// <summary>
      /// 根据文本,计算按钮它实际的宽度
      /// </summary>
      /// <returns></returns>
      public static int GetRealWidthByText(Button btn)
      {
         if (string.IsNullOrEmpty(btn.Text)) { return Application.GetRealWidth(4); }
#if __IOS__
         //需要增加一个误差值
         return btn.GetTextWidth() + Application.GetRealWidth(8);
#else
            //需要增加一个误差值
            return btn.GetTextWidth() + Application.GetRealWidth(4);
#endif
      }
      /// <summary>
      /// 生成随机字符串
      /// </summary>
      /// <param name="length">字符串的长度</param>
      /// <returns></returns>
      public static string CreateRandomString(int length)
      {
         // 创建一个StringBuilder对象存储密码
         StringBuilder sb = new StringBuilder();
         //使用for循环把单个字符填充进StringBuilder对象里面变成14位密码字符串
         for (int i = 0; i < length; i++)
         {
            Random random = new Random(Guid.NewGuid().GetHashCode());
            //随机选择里面其中的一种字符生成
            switch (random.Next(3))
            {
               case 0:
                  //调用生成生成随机数字的方法
                  sb.Append(createNum());
                  break;
               case 1:
                  //调用生成生成随机小写字母的方法
                  sb.Append(createSmallAbc());
                  break;
               case 2:
                  //调用生成生成随机大写字母的方法
                  sb.Append(createBigAbc());
                  break;
            }
         }
         return sb.ToString();
      }
      /// <summary>
      /// 生成单个随机数字
      /// </summary>
      static int createNum()
      {
         Random random = new Random(Guid.NewGuid().GetHashCode());
         int num = random.Next(10);
         return num;
      }
      /// <summary>
      /// 生成单个大写随机字母
      /// </summary>
      static string createBigAbc()
      {
         //A-Z的 ASCII值为65-90
         Random random = new Random(Guid.NewGuid().GetHashCode());
         int num = random.Next(65, 91);
         string abc = Convert.ToChar(num).ToString();
         return abc;
      }
      /// <summary>
      /// 生成单个小写随机字母
      /// </summary>
      static string createSmallAbc()
      {
         //a-z的 ASCII值为97-122
         Random random = new Random(Guid.NewGuid().GetHashCode());
         int num = random.Next(97, 123);
         string abc = Convert.ToChar(num).ToString();
         return abc;
      }
      /// <summary>
      /// 获取时间戳(ss)
      /// </summary>
      /// <param name="unixTimeStamp"></param>
      /// <returns></returns>
      public static DateTime UnixToDateTime(long unixTimeStamp)
        {
            DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
            return startTime.AddSeconds(unixTimeStamp);
        }
        /// <summary>
        /// </summary>
        /// <param name="unixTimeStamp"></param>
        /// <returns></returns>
        public static long DateTimeToUnix(DateTime dateTime)
        {
            DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
            return (long)(dateTime - startTime).TotalSeconds; // 相差秒数
        }
      /// <summary>
      ///
      /// </summary>
      /// <param name="unixTimeStamp"></param>
      /// <returns></returns>
      public static DateTime UnixToDateTimeMS(long unixTimeStamp)
      {
         DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
         return startTime.AddMilliseconds(unixTimeStamp);
      }
      /// <summary>
        /// 时间戳转时间字符串
        /// </summary>
        /// <param name="unixTimeStamp"></param>
        /// <param name="format"></param>
        /// <returns></returns>
      public static string UnixToDateTimeWithFormatMS(long unixTimeStamp, string format = "yyyy")
      {
         DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
         return startTime.AddMilliseconds(unixTimeStamp).ToString(format);
      }
      /// <summary>
      ///
      /// </summary>
      /// <param name="unixTimeStamp">毫秒时间戳</param>
      /// <returns></returns>
      public static string UnixToDateTimeYearMS(long unixTimeStamp)
      {
         try
         {
            return UnixToDateTimeWithFormatMS(unixTimeStamp);
            }
            catch
            {
            return "2000";
            }
      }
      /// <summary>
      /// 获取时间戳(s)
      /// </summary>
      /// <param name="isMilliseconds">是否微秒</param>
      /// <returns></returns>
      public static string GetTimestamp(bool isMilliseconds = true)
      {
         System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
         if (isMilliseconds)
         {
            return ((long)(DateTime.Now - startTime).TotalMilliseconds).ToString(); // 相差微秒数
         }
         else
         {
                return ((long)(DateTime.Now - startTime).TotalSeconds).ToString(); // 相差秒数
            }
      }
      /// <summary>
      /// 获取请求提交的语言参数
      /// </summary>
      public static string GetPostLanguageType()
      {
         return Language.CurrentLanguage == "Chinese" ? LanguageTypeEnum.CHINESE.ToString() : LanguageTypeEnum.ENGLISH.ToString();
      }
      #region 时间格式转换
      private const int Second = 1;
      private const int Minute = 60 * Second;
      private const int Hour = 60 * Minute;
      private const int Day = 24 * Hour;
      private const int Month = 30 * Day;
      ///// <summary>
      ///// 时间转换
      ///// 少于1天  显示 时分
      ///// 少于一年 显示 月日
      ///// 大于一年 显示 年
      ///// </summary>
      ///// <param name="dateTime"></param>
      ///// <returns></returns>
      //public static string ToFriendlyDisplay(this DateTime dateTime)
      //{
      //   var ts = DateTime.Now - dateTime;
      //   var delta = ts.TotalSeconds;
      //   if (delta < Day)
      //   {
      //      //显示 时:分
      //      return dateTime.ToString("HH:mm");
      //   }
      //   else if (delta < 12 * Month)
      //   {
      //      //显示 月:日
      //      return dateTime.ToString("MM/dd");
      //   }
      //   else
      //   {   //显示 年
      //      return dateTime.ToString("yyyy");
      //   }
      //}
      /// <summary>
      /// 时间转换
      /// 少于1天  显示 时分
      /// 少于一年 显示 月日
      /// 大于一年 显示 年
      /// </summary>
      /// <param name="dateTime"></param>
      /// <returns></returns>
      public static string ToFriendlyDisplay(this DateTime dateTime)
      {
         var nowDateTime = DateTime.Now;
         var subYear = nowDateTime.Year - dateTime.Year;
         var subMonth = nowDateTime.Month - dateTime.Month;
         var subDay = nowDateTime.Day - dateTime.Day;
         //年份差值大于0
         if(subYear > 0)
            {
            //显示 年
            return dateTime.ToString("yyyy");
            }
            else
            {
            //相同年份,月份差值大于0
            if (subMonth > 0)
                {
               //显示 月:日
               return dateTime.ToString("MM/dd");
                }
                else
                {
               //相同月份,日期差值大于0
               if (subDay > 0)
               {
                  //显示 月:日
                  return dateTime.ToString("MM/dd");
               }
               else
               {
                  //同一天显示 时:分
                  return dateTime.ToString("HH:mm");
               }
            }
            }
      }
      /// <summary>
      /// 时间转换
      /// 少于1天  显示 时分
      /// 少于一年 显示 月日
      /// 大于一年 显示 年
      /// </summary>
      /// <param name="dateTime"></param>
      /// <returns></returns>
      public static string ToFriendlyDisplay(long unixTimeStamp)
      {
         return ToFriendlyDisplay(UnixToDateTimeMS(unixTimeStamp));
      }
      #endregion
   }
}