HarmonyOS 日期与字符处理综合指南:DateUtil + CharUtil 实战
文章目录一、前言二、DateUtil 核心 API 回顾三、CharUtil 核心 API 回顾四、DateUtil 完整 Demo 演示五、CharUtil 完整 Demo 演示六、组合使用表单完整验证方案场景用户注册表单七、日期与字符处理综合参考表DateUtil 格式化占位符CharUtil 检测速查八、小结一、前言近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓在 HarmonyOS 应用中日期处理和字符验证是几乎每个项目都会用到的基础能力注册时间、发布时间、消息时间——需要DateUtil格式化和计算用户名、密码、手机号——需要CharUtil验证字符类型本文将DateUtil和CharUtil的核心能力综合展示并给出表单场景下的实战用法。二、DateUtil 核心 API 回顾// 格式化日期为字符串staticgetFormatDateStr(date,format?:string):string// 获取相对时间描述刚刚/X分钟前/昨天等staticgetTipDateStr(date):string// 比较两个日期返回毫秒差staticcompareDate(d1,d2,abs?:boolean):number// 比较天数差staticcompareDays(d1,d2,abs?:boolean,digit?:number):number// 判断是否同一天/月/年staticisSameDay(d1,d2):booleanstaticisSameMonth(d1,d2):booleanstaticisSameYear(d1,d2):boolean// 获取某月天数staticgetDaysByMonth(year?:number,month?:number):number// 是否闰年staticisLeapYear(date?):boolean// 获取一周的第几天0周日~6周六staticgetWeekDay(date?):number// 前N天/后N天staticgetBeforeDay(day:number,date?):DatestaticgetAfterDay(day:number,date?):Date三、CharUtil 核心 API 回顾// 是否数字字符staticisDigit(c:string):boolean// 是否字母字符staticisLetter(c:string):boolean// 是否小写字母staticisLowerCase(c:string):boolean// 是否大写字母staticisUpperCase(c:string):boolean// 是否空格字符staticisSpaceChar(c:string):boolean// 是否空白字符空格、Tab、换行等staticisWhitespace(c:string):boolean// 是否表意文字中文/日文/韩文等CJK字符staticisIdeograph(c:string):boolean// 是否空白字符包含全角空格staticisBlankChar(c:string):boolean// 是否ASCII字符0~127staticisAscii(c:string):boolean四、DateUtil 完整 Demo 演示DateUtilDemoPage.ets中的日期格式化演示// 格式化日期展示loadFormatDates(){constnownewDate();// 不同格式的输出this.dateYMDDateUtil.getFormatDateStr(now,YYYY-MM-DD);this.dateHMSDateUtil.getFormatDateStr(now,HH:mm:ss);this.dateFullDateUtil.getFormatDateStr(now,YYYY-MM-DD HH:mm:ss);this.dateCNDateUtil.getFormatDateStr(now,YYYY年MM月DD日);// 相对时间constfiveMinutesAgonewDate(Date.now()-5*60*1000);this.tipDate5MinDateUtil.getTipDateStr(fiveMinutesAgo);// 5分钟前constoneHourAgonewDate(Date.now()-60*60*1000);this.tipDate1HourDateUtil.getTipDateStr(oneHourAgo);// 1小时前constyesterdayDateUtil.getBeforeDay(1);this.tipDateYesterdayDateUtil.getTipDateStr(yesterday);// 昨天}日期比较演示loadDateComparison(){constdate1newDate(2024-01-01);constdate2newDate(2024-06-15);this.daysDiffDateUtil.compareDays(date1,date2,true,0);// 165天this.isSameYearDateUtil.isSameYear(date1,date2);// truethis.isSameMonthDateUtil.isSameMonth(date1,date2);// falsethis.addLog(DateCompare,相差${this.daysDiff}天同年:${this.isSameYear},info);}日历计算演示loadCalendarInfo(){constyearnewDate().getFullYear();// 各月天数for(letm1;m12;m){constdaysDateUtil.getDaysByMonth(year,m);this.monthDays.push({month:m,days});}// 是否闰年this.isLeapYearDateUtil.isLeapYear();// 今天是本周第几天constweekDayDateUtil.getWeekDay();// 0周日, 1周一...this.weekDayLabel[周日,周一,周二,周三,周四,周五,周六][weekDay];}五、CharUtil 完整 Demo 演示CacheCharClickDemoPage.ets中的字符检测演示checkChar(c:string){if(!c){this.addLog(CharUtil,请输入字符,warn);return;}constresults[isDigit:${CharUtil.isDigit(c)},isLetter:${CharUtil.isLetter(c)},isUpperCase:${CharUtil.isUpperCase(c)},isLowerCase:${CharUtil.isLowerCase(c)},isSpaceChar:${CharUtil.isSpaceChar(c)},isWhitespace:${CharUtil.isWhitespace(c)},isIdeograph:${CharUtil.isIdeograph(c)},isBlankChar:${CharUtil.isBlankChar(c)},isAscii:${CharUtil.isAscii(c)},];this.addLog(CharUtil,${c} →${results.join(, )},info);}六、组合使用表单完整验证方案场景用户注册表单interfaceRegistrationForm{username:string;password:string;birthday:string;}interfaceValidationResult{valid:boolean;message:string;}// 用户名验证CharUtilfunctionvalidateUsername(username:string):ValidationResult{if(!username)return{valid:false,message:用户名不能为空};if(username.length3||username.length20){return{valid:false,message:用户名长度应为 3~20 个字符};}// 检查是否包含非法字符只允许字母、数字、中文for(constcofusername){if(!CharUtil.isLetter(c)!CharUtil.isDigit(c)!CharUtil.isIdeograph(c)){return{valid:false,message:字符 ${c} 不合法仅允许字母/数字/中文};}}return{valid:true,message:用户名合法};}// 密码强度验证CharUtilfunctionvalidatePassword(password:string):ValidationResult{if(password.length8){return{valid:false,message:密码长度不能小于 8 位};}lethasUpperfalse,hasLowerfalse,hasDigitfalse;for(constcofpassword){if(CharUtil.isUpperCase(c))hasUppertrue;if(CharUtil.isLowerCase(c))hasLowertrue;if(CharUtil.isDigit(c))hasDigittrue;}if(!hasUpper||!hasLower||!hasDigit){return{valid:false,message:密码需包含大写字母、小写字母和数字};}return{valid:true,message:密码强度合格};}// 生日验证DateUtilfunctionvalidateBirthday(birthday:string):ValidationResult{try{constdateDateUtil.getFormatDate(birthday);constnownewDate();// 不能是未来日期if(DateUtil.compareDate(date,now)0){return{valid:false,message:生日不能是未来日期};}// 年龄 18~120 岁constyearsDateUtil.compareDays(date,now,true)/365;if(years18)return{valid:false,message:年龄不能小于 18 岁};if(years120)return{valid:false,message:请输入合法日期};// 格式化显示constformattedDateUtil.getFormatDateStr(date,YYYY年MM月DD日);return{valid:true,message:生日:${formatted}};}catch{return{valid:false,message:日期格式不正确};}}七、日期与字符处理综合参考表DateUtil 格式化占位符占位符含义示例YYYY4 位年份2024MM2 位月份补零01~12DD2 位日期补零01~31HH2 位小时24时制00~23mm2 位分钟00~59ss2 位秒00~59CharUtil 检测速查方法匹配字符isDigit0-9isLettera-z A-ZisUpperCaseA-ZisLowerCasea-zisSpaceCharUnicode 空格类字符isWhitespace空格/Tab/换行/回车isIdeograph中日韩文字CJKisBlankChar含全角空格的广义空白isAsciiASCII 0~127八、小结DateUtil和CharUtil分别解决了时间数据和文本数据的处理需求DateUtil格式化、比较、计算——所有日期场景的一站式工具CharUtil逐字符检测——表单验证、密码强度、输入过滤的基础工具两者联合使用可以覆盖 HarmonyOS 应用中绝大多数的数据处理和验证场景。