using System;
using Shared;
using System.Text.RegularExpressions;
using System.Text;
namespace HDL_ON
{
///
/// 常用工具类
///
public static class Utlis
{
///
/// 全局打印
///
public static void WriteLine(object mes)
{
#if DEBUG
Console.WriteLine(mes);
#endif
}
///
/// 弹窗提示
///
///
public static void ShowAlertOnMainThread(string mes)
{
Application.RunOnMainThread(() => {
new Alert("", mes, Language.StringByID(StringId.Close)).Show();
});
}
///
/// ShowTip
///
///
/// 关闭时间
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 ■ 各种正则检测_______________________
///
/// 用于中国大陆验证手机号正则表达式
/// 以1开头,11位
///
public static string PhoneRegexStr = "^[1][0-9]{10}$";
///
/// 用于验证非中国大陆手机号正则表达式
///
public static string PhoneForForeignRegexStr = "^[0-9]*$";
///
/// 用于验证邮箱正则表达式
/// 2021-10-21 11:07:44 同步云端正则格式 --wxr
///
public static string EmailRegexStr = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$";
//public static string EmailRegexStr = "^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$";
///
/// 判断是否包含大写字母
///
/// true, if contain upper was checked, false otherwise.
/// Value.
public static bool CheckContainUpper(string value)
{
Regex reg = new Regex("[A-Z]+");
return reg.IsMatch(value);
}
///
/// 判断是否包含小写字母
///
/// true, if contain lower was checked, false otherwise.
/// Value.
public static bool CheckContainLower(string value)
{
Regex reg = new Regex("[a-z]+");
return reg.IsMatch(value);
}
///
/// 判断是否包含数字
///
/// true, if contain lower was checked, false otherwise.
/// Value.
public static bool CheckContainNum(string value)
{
Regex reg = new Regex("[0-9]+");
return reg.IsMatch(value);
}
///
/// 判断是否包含符号
///
/// true, if contain lower was checked, false otherwise.
/// Value.
public static bool CheckContainSymbol(string value)
{
Regex reg = new Regex("([^a-z0-9A-Z])+");
return reg.IsMatch(value);
}
///
/// 检测邮箱是否合法
///
///
///
public static bool CheckEmail(string email)
{
Regex reg = new Regex(EmailRegexStr);
return reg.IsMatch(email);
}
///
/// 检测手机号是否合法
///
/// 手机号
/// 地区代码
///
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
///
/// TextButton
/// 根据文本,计算按钮它实际的宽度
///
///
/// 补充宽度
///
public static int GetRealWidthByTextButton(Button btn, int extendWidth = 1)
{
if (string.IsNullOrEmpty(btn.Text)) { return Application.GetRealWidth(extendWidth); }
return btn.GetTextWidth() + Application.GetRealWidth(extendWidth);
}
///
/// 根据文本,计算按钮它实际的宽度
///
///
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
}
///
/// 生成随机字符串
///
/// 字符串的长度
///
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();
}
///
/// 生成单个随机数字
///
static int createNum()
{
Random random = new Random(Guid.NewGuid().GetHashCode());
int num = random.Next(10);
return num;
}
///
/// 生成单个大写随机字母
///
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;
}
///
/// 生成单个小写随机字母
///
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;
}
///
/// 获取时间戳(ss)
///
///
///
public static DateTime UnixToDateTime(long unixTimeStamp)
{
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
return startTime.AddSeconds(unixTimeStamp);
}
///
///
///
///
public static long DateTimeToUnix(DateTime dateTime)
{
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
return (long)(dateTime - startTime).TotalSeconds; // 相差秒数
}
///
///
///
///
///
public static DateTime UnixToDateTimeMS(long unixTimeStamp)
{
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
return startTime.AddMilliseconds(unixTimeStamp);
}
///
/// 时间戳转时间字符串
///
///
///
///
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);
}
///
///
///
/// 毫秒时间戳
///
public static string UnixToDateTimeYearMS(long unixTimeStamp)
{
try
{
return UnixToDateTimeWithFormatMS(unixTimeStamp);
}
catch
{
return "2000";
}
}
///
/// 获取时间戳(s)
///
/// 是否微秒
///
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(); // 相差秒数
}
}
///
/// 获取请求提交的语言参数
///
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;
/////
///// 时间转换
///// 少于1天 显示 时分
///// 少于一年 显示 月日
///// 大于一年 显示 年
/////
/////
/////
//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");
// }
//}
///
/// 时间转换
/// 少于1天 显示 时分
/// 少于一年 显示 月日
/// 大于一年 显示 年
///
///
///
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");
}
}
}
}
///
/// 时间转换
/// 少于1天 显示 时分
/// 少于一年 显示 月日
/// 大于一年 显示 年
///
///
///
public static string ToFriendlyDisplay(long unixTimeStamp)
{
return ToFriendlyDisplay(UnixToDateTimeMS(unixTimeStamp));
}
#endregion
}
}